了解 RAII 对象
Understanding RAII object
我正在阅读 RAII
原则,对此有一些疑问。实际上,它封装了资源。所以,考虑 class std::string
。它有一个 constructor string (const char* s);
. So, like smart pointers (e.g. template explicit shared_ptr (U* p);) 它需要一个指向资源的指针然后管理它。关于 string
的说法是否正确?
like smart pointers (e.g. shared_ptr
) it takes a pointer to the resource and then manages it. Is it correct
不完全是。 shared_ptr
s 参与了该指针指向的对象的所有权,而 unique_ptr
获得了独占所有权。在智能指针中,weak_ptr
不会立即取得所有权,但它会作为 shared_ptr
拥有的对象的观察者加入,并允许稍后尝试共享所有权。
要点是那些智能指针拥有由给定的指针指示的现有对象的所有权。
std::string(const char*)
,另一方面, 复制 指针指向的以 NUL 结尾的字符串,然后它拥有独占所有权。构造函数的指针参数指向的原始文本与构造的 string
对象没有持续相关性;例如,对 string
的修改不会影响该文本。另外,std::string
对象可能会在内部保存一个指向动态分配缓冲区的指针,该缓冲区存储 文本的副本,并且该缓冲区可以调整大小和更新(其他时候 - 为了充分短文本 - 它可以作为优化直接存储在 std::string
对象中)。在销毁时,std::string
将 delete[]
它仍在管理的任何内部指针。他们从不泄漏内存。
我正在阅读 RAII
原则,对此有一些疑问。实际上,它封装了资源。所以,考虑 class std::string
。它有一个 constructor string (const char* s);
. So, like smart pointers (e.g. template explicit shared_ptr (U* p);) 它需要一个指向资源的指针然后管理它。关于 string
的说法是否正确?
like smart pointers (e.g.
shared_ptr
) it takes a pointer to the resource and then manages it. Is it correct
不完全是。 shared_ptr
s 参与了该指针指向的对象的所有权,而 unique_ptr
获得了独占所有权。在智能指针中,weak_ptr
不会立即取得所有权,但它会作为 shared_ptr
拥有的对象的观察者加入,并允许稍后尝试共享所有权。
要点是那些智能指针拥有由给定的指针指示的现有对象的所有权。
std::string(const char*)
,另一方面, 复制 指针指向的以 NUL 结尾的字符串,然后它拥有独占所有权。构造函数的指针参数指向的原始文本与构造的 string
对象没有持续相关性;例如,对 string
的修改不会影响该文本。另外,std::string
对象可能会在内部保存一个指向动态分配缓冲区的指针,该缓冲区存储 文本的副本,并且该缓冲区可以调整大小和更新(其他时候 - 为了充分短文本 - 它可以作为优化直接存储在 std::string
对象中)。在销毁时,std::string
将 delete[]
它仍在管理的任何内部指针。他们从不泄漏内存。