假设我有两个boost::shared_ptr
指向class A
的两个不同对象:
boost::shared_ptr<A> x = boost::make_shared<A>();
boost::shared_ptr<A> y = boost::make_shared<A>();
在某些时候,我需要x
放弃其拥有的对象的所有权,并与y
共享y
对象的所有权。如何实现这一点(请注意,shared_ptr都是在那时构建的,因此没有机会使用复制构造函数)?
谢谢!
答案 0 :(得分:4)
您可以简单地指定它:
x = y;
请参阅assignment operators for std::shared_ptr和boost::shared_ptr assignment。您可以通过检查分配前后的引用计数来验证这一点。此示例使用C ++ 11 std::shared_ptr
,但boost::shared_ptr
会产生相同的结果:
#include <memory>
int main()
{
std::shared_ptr<int> x(new int);
std::cout << x.use_count() << "\n"; // 1
std::shared_ptr<int> y(new int);
std::cout << x.use_count() << "\n"; // still 1
y = x;
std::cout << x.use_count() << "\n"; // 2
}