首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解RAII对象

理解RAII对象
EN

Stack Overflow用户
提问于 2015-10-01 03:21:37
回答 1查看 152关注 0票数 0

我正在阅读关于RAII原理的文章,并对它提出了一些问题。实际上,它封装了资源。因此,考虑std::string类。它有一个构造函数 string (const char* s);。因此,就像智能指针(例如p);)一样,它需要一个指向资源的指针,然后管理它。这么说strings是正确的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-01 03:39:52

就像智能指针(例如shared_ptr)一样,它接受指向资源的指针,然后管理它。对不对?

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

问题是,这些智能指针拥有由给定指针指示的现有对象的所有权。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32878915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档