6

将一个共享指针分配给另一个共享指针是否会释放后者管理的内存?让

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.
4

1 回答 1

7

是的,pA不再指向 char 'A',因此引用计数减少了。因为它是对 的唯一引用'A',所以引用计数达到零并且 char 被删除。如果您必须在重新分配之前明确释放引用,那将是非常令人惊讶且容易出错的。

pA.reset(pB)不应该编译,因为reset只能采用原始指针,而不是另一个shared_ptr.

于 2013-07-20T19:13:15.290 回答