发布于 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::string将delete[]它仍在管理的任何内部指针。他们从不泄露记忆。
https://stackoverflow.com/questions/32878915
复制相似问题