将一个共享指针分配给另一个共享指针是否会释放后者管理的内存?让
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.
| 归档时间: | 
 | 
| 查看次数: | 6136 次 | 
| 最近记录: |