我正在研究这个项目,
我遇到的问题是,当我需要它时,它并没有真正被删除,因为它有一些指向它的共享指针。
我如何解决这个问题,请帮忙。
答案 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仍然保存指向对象的指针,并检查它们是否应该不再持有该对象。