我正在阅读有关 RAII
原理的文章,并且对此有一些疑问。实际上,它封装了资源。因此,考虑类 std::string
。它有一个 constructor 字符串(常量字符* s);
。因此,就像智能指针(例如 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
参与该指针指向的对象的所有权,而 unique_ptr
则拥有独占所有权。在智能指针中,weak_ptr
不会立即取得所有权,但它会作为 shared_ptr
拥有的对象的观察者加入,并允许稍后尝试共享所有权。
要点在于,这些智能指针拥有由给定的指针指示的现有对象的所有权。
std::string(const char*)
,另一方面,复制指针指向的以 NUL 结尾的字符串,然后它拥有独家所有权。构造函数的指针参数指向的原始文本与构造的 string
对象没有持续相关性;例如,对 string
的修改不会影响该文本。另外,std::string
对象可以在内部保存一个指向动态分配的缓冲区的指针,该缓冲区存储文本的拷贝,并且该缓冲区可以调整大小和更新(其他时候- 对于足够短的文本 - 它可以作为优化直接存储在 std::string
对象中)。在销毁时,std::string
将delete[]
它仍在管理的任何内部指针。它们从不泄漏内存。
关于c++ - 了解 RAII 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32878915/