shared_ptr对象全局删除

时间:2016-09-20 14:03:34

标签: c++

我想使用像std库的shared_ptr这样的智能指针 可以删除共享它的每个shared_ptr的对象 没有删除那些指针。

例如,如果我使用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

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

1 个答案:

答案 0 :(得分:3)

绝对。 std::shared_ptr附带std::weak_ptr,指针指向由一组std::shared_ptr管理的对象,并检查它是否仍然存活,但不扩展对象的对象寿命。

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