将一个共享指针分配给另一个共享指针释放后者管理的内存吗?让
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.
答案 0 :(得分:4)
是的,pA
不再指向char 'A'
,因此引用计数递减。因为它是对'A'
的唯一引用,所以引用计数达到零并且删除了char。如果您必须在重新分配之前明确地释放引用,那将是非常令人惊讶和容易出错的。
pA.reset(pB)
不应该编译,因为reset
只能使用原始指针,而不是另一个shared_ptr
。