shared_ptr对象全局删除

shared_ptr object global deletion

本文关键字:全局 删除 对象 ptr shared      更新时间:2023-10-16

我想使用像std库的shared_ptr这样的智能指针,但在可以为每个共享该对象的sharedptr删除该对象而不删除那些指针。

例如,如果我使用std::shared_ptr

shared_ptr<A> p1 = make_share<A>();
shared_ptr<A> p2 = shared_ptr<A>(p1);
p1.reset();
// now p2 still contain the object of type A
// instead of nullptr

有没有办法做到这一点,或者是否存在一些替代方案?我做错了吗?

当然。std::shared_ptr附带了std::weak_ptr,这是一个指针,可以指向由一组std::shared_ptr管理的对象,并检查它是否仍然活动,但不会延长对象的生存期。

您只需要保留对象的原始std::shared_ptr,并将std::weak_ptr借给该对象的其他用户。当对象必须被销毁时,重置std::shared_ptr,所有剩余的std::weak_ptr s将能够告知(当用户试图锁定它们时,它们将返回空std::shared_ptr s(。