将一个shared_ptr分配给另一个

时间:2013-07-20 19:07:31

标签: c++11 shared-ptr

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

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.

1 个答案:

答案 0 :(得分:4)

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

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