2015-10-01 53 views
0

我阅读RAII原则,有关于它的一些问题。实际上,它封装了资源。所以,请考虑类std::string。它有一个constructorstring (const char* s);。所以,就像智能​​指针(例如template explicit shared_ptr (U* p);)它需要一个指向资源的指针然后管理它。对于string s这么说是否正确?了解RAII对象

回答

4

像智能指针(例如shared_ptr)它需要一个指向资源,然后管理它。它是正确的

不太。 shared_ptr。就拿部分在到该指针分,而需要unique_ptr独占所有权的对象的所有权。智能指针,weak_ptr并不需要立即拥有,但它加入由shared_ptr S投资对象的观察员,并允许共享所有权稍后尝试。

的一点是,这些智能指针采取由他们给出的指针所指示的现有对象的所有权。

std::string(const char*),在另一方面,使得NUL终止的字符串的副本到指针所指向,它于是具有的独占所有权。构造函数的指针参数所指向的原始文本与构造的对象string没有任何关联;例如,对string的修改不会影响该文本。分别地,将std::string对象可以在内部的指针保持到动态分配缓冲器,存储文本的副本,并且该缓冲器可被调整大小并更新(其他时间 - 为足够短的文本 - 它可被直接存储在std::string对象作为优化)。销毁时,std::stringdelete[]任何内部指针仍在管理。他们从不泄漏记忆。