在构建之后共享boost :: shared_ptr的所有权

时间:2012-08-26 18:45:28

标签: c++ boost shared-ptr

假设我有两个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都是在那时构建的,因此没有机会使用复制构造函数)?

谢谢!

1 个答案:

答案 0 :(得分:4)

您可以简单地指定它:

x = y;

请参阅assignment operators for std::shared_ptrboost::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
}