将一个共享指针分配给另一个共享指针是否会释放后者管理的内存?让
typedef shared_ptr<char> char_ptr_t;
char_ptr_t pA(new char('A'));
char_ptr_t pB(new char('B'));
现在,下面的语句是否释放了
'A'
的内存? ?/*1*/ pA = pB;
还是我需要明确释放它:
/*2*/ pA.reset();
/*3*/ pA = pB;
并且,以下代码对于实现相同是否有效?
/*4*/ pA.reset(pB); //<-- is this valid? Not compiling in MSVC++ 2010, though the standard seems to allow it.
最佳答案
是的,pA
不指向字符 'A'
不再,所以引用计数递减。因为它是对 'A'
的唯一引用,引用计数达到零并删除字符。如果您必须在重新分配之前显式释放引用,那将是非常令人惊讶且容易出错的。pA.reset(pB)
不应该编译,如 reset
只能取一个原始指针,不能取另一个 shared_ptr
.
关于c++11 - 将一个 shared_ptr 分配给另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17765720/