0

假设我有两个boost::shared_ptr's 指向两个不同的对象class A

boost::shared_ptr<A> x = boost::make_shared<A>();
boost::shared_ptr<A> y = boost::make_shared<A>();

在某些时候,我需要x放弃它所拥有的对象的所有权,并yy. 这是如何实现的(请注意,两个 shared_ptr 都是在那时构造的,所以没有机会使用复制构造函数)?

谢谢!

4

1 回答 1

4

您可以简单地分配它:

x = y;

请参阅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
}
于 2012-08-26T18:48:25.027 回答