C++ 理解RAII对象

C++ 理解RAII对象,c++,raii,C++,Raii,我正在阅读有关RAII原则的文章,对此我有一些疑问。事实上,它封装了资源。因此,考虑类 STD::String < /代码>。它有一个字符串(const char*s)。因此,与智能指针(例如)一样,它获取指向资源的指针,然后对其进行管理。关于strings这样说对吗 与智能指针(例如,共享\u ptr)一样,它获取指向资源的指针,然后对其进行管理。对吗 不完全是shared_ptrs参与该指针指向的对象的所有权,而unique_ptr拥有独占所有权。在智能指针中,weak_ptr不会立即获得所

我正在阅读有关RAII原则的文章,对此我有一些疑问。事实上,它封装了资源。因此,考虑类<代码> STD::String < /代码>。它有一个
字符串(const char*s)。因此,与智能指针(例如)一样,它获取指向资源的指针,然后对其进行管理。关于
string
s这样说对吗

与智能指针(例如,
共享\u ptr
)一样,它获取指向资源的指针,然后对其进行管理。对吗

不完全是
shared_ptr
s参与该指针指向的对象的所有权,而
unique_ptr
拥有独占所有权。在智能指针中,
weak_ptr
不会立即获得所有权,但它会作为
shared_ptr
s拥有的对象的观察者加入,并允许稍后尝试共享所有权

关键是,这些智能指针拥有给定指针所指示的现有对象的所有权

另一方面,std::string(const char*)
创建指针指向的以NUL结尾的字符串的副本,然后指针对该字符串拥有独占所有权。构造函数指针参数指向的原始文本与所构造的
字符串
对象没有持续相关性;例如,对
字符串的修改不会影响该文本。另外,
std::string
对象可以在内部保留指向存储文本副本的动态分配缓冲区的指针,并且可以调整和更新该缓冲区的大小(其他时候,对于足够短的文本,可以将其作为优化直接存储在
std::string
对象中)。销毁时,
std::string
删除[]
它仍在管理的任何内部指针。他们从不泄漏内存

与智能指针(例如,
共享\u ptr
)一样,它获取指向资源的指针,然后对其进行管理。对吗

不完全是
shared_ptr
s参与该指针指向的对象的所有权,而
unique_ptr
拥有独占所有权。在智能指针中,
weak_ptr
不会立即获得所有权,但它会作为
shared_ptr
s拥有的对象的观察者加入,并允许稍后尝试共享所有权

关键是,这些智能指针拥有给定指针所指示的现有对象的所有权

另一方面,std::string(const char*)
创建指针指向的以NUL结尾的字符串的副本,然后指针对该字符串拥有独占所有权。构造函数指针参数指向的原始文本与所构造的
字符串
对象没有持续相关性;例如,对
字符串的修改不会影响该文本。另外,
std::string
对象可以在内部保留指向存储文本副本的动态分配缓冲区的指针,并且可以调整和更新该缓冲区的大小(其他时候,对于足够短的文本,可以将其作为优化直接存储在
std::string
对象中)。销毁时,
std::string
删除[]
它仍在管理的任何内部指针。他们从不泄漏内存