假设我有两个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放弃它所拥有的对象的所有权,并y与y. 这是如何实现的(请注意,两个 shared_ptr 都是在那时构造的,所以没有机会使用复制构造函数)?
谢谢!
假设我有两个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放弃它所拥有的对象的所有权,并y与y. 这是如何实现的(请注意,两个 shared_ptr 都是在那时构造的,所以没有机会使用复制构造函数)?
谢谢!
您可以简单地分配它:
x = y;
请参阅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
}