我在C++中有一个与boost::shared_ptr<>
有关的问题。我现在愿意履行我的列表项的智能删除:如果该项目不在使用在列表中正确使用boost :: shared_ptr
- 如果产品在使用中,不要做任何事情,后来将其删除
- ,删除它
这是我的程序所需的行为。
我真的想知道如何做到这一点,因为std::list<boost::shared_ptr<object> >
删除/擦除功能会导致删除shared_ptr<>
,从而删除真实物体。
所以我终于想出了这个解决方案:使用std::list<object*>
并从boost::enable_shared_from_this<>
继承object
。这样,当有人需要使用列表中的项目时,我给他们object->shared_from_this()
。
我的问题有以下几点:
- 请问这方面所期望的行为?
- 与
shared_from_this()
相关联的boost::shared_ptr<>
是否考虑了对列表中对象的引用?
我希望我的问题足够明确,并且有人能够帮助我。正确使用列表中的智能指针是我希望能够使用的。
谢谢
'std :: list>删除/擦除功能会导致删除真实对象*仅当它是最后一次引用对象*的shared_ptr时。这正是你说你想要的。我猜你正在使用shared_ptr和普通指针指向同一个对象。答案很简单,不要那样做,只有shared_ptrs,它会按照你所说的要求工作。有时我想知道新手为自己生活困难的能力。 –
john
感谢您的回答。那么,你说的是我的想法。在我的程序中,我得到了两倍的免费(这是相当大的),并认为我错误地认为是“valgrind”。我试图在一个小程序中重现它,但不能。我想我是你说的新手。感谢您的帮助 – Rippalka