C ++ shared_ptr如何删除多个shared_ptr的指针

时间:2010-10-12 16:21:55

标签: c++ shared-ptr smart-pointers

我正在研究这个项目,

我遇到的问题是,当我需要它时,它并没有真正被删除,因为它有一些指向它的共享指针。

我如何解决这个问题,请帮忙。

2 个答案:

答案 0 :(得分:9)

这是设计的。只要一个对象由一个或多个shared_ptr智能指针拥有,它就不会被销毁。对象的所有权由所有具有所有权的智能指针共享,并且在完成所有所有者之前不能销毁该对象。这就是共享所有权。

如果您希望能够在仍有一些引用的情况下销毁该对象,则可以使用weak_ptr作为这些引用。

答案 1 :(得分:0)

您可以使用shared_ptr方法减少reset()的use_count。

如果对每个包含实例的指针执行此操作,则最后reset()将销毁它指向的对象。

shared_ptr<Class> myPointer1( new Class() ); //myPointer holds an instance of Class
shared_ptr<Class> myPointer2 = myPointer1; //use_count == 2
myPointer1.reset(); //use_count == 1
myPointer2.reset(); //instance of class will be destroyed

但是你的设计可能有问题,当某些对象被销毁或方法结束时,shared_ptr应该会自动失焦。也许您应该看看shared_ptrs仍然保存指向对象的指针,并检查它们是否应该不再持有该对象。