重定向share_ptr以指向另一个对象

时间:2015-03-20 15:11:49

标签: c++11 shared-ptr

shared_ptr<int> ptr (new int(5));
ptr = new int(6); // this is illegal

如何将ptr从现有对象(int 5)重定向到另一个对象?

注意,暗示是,对象int 5的ref count应该递减。并且ptr对象应该在预期的&#34;赋值&#34;之后指向新的int 6对象。

干杯。

2 个答案:

答案 0 :(得分:4)

来自原始指针的shared_ptr构造函数是explicit,以防止意外获取应该拥有(并且不应删除)的指针的所有权。这意味着你不能写:

shared_ptr<int> p = new int(5);

而你必须写:

shared_ptr<int> p(new int(5));

显式调用显式构造函数。

出于类似的原因,也不支持从原始指针进行分配。你需要写:

p = shared_ptr<int>(new int(6));

或:

p.reset(new int(6));

答案 1 :(得分:2)

答案很简单:

shared_ptr<int> ptr (new int(5));
ptr.reset(new int(6)); // this is legal

还有一个澄清:方法.reset()递减整数5的引用计数。因此,如果用Valgrind检查程序,它不会泄漏任何内存。