假设我有两个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
}