我在C ++中有一个与boost::shared_ptr<>
相关的问题。我目前愿意智能删除列表中的项目:
这是我的程序所需的行为。
我真的很想知道如何正确地执行此操作,因为std::list<boost::shared_ptr<object> >
删除/删除功能导致删除shared_ptr<>
,因此删除了真实对象。
所以我终于提出了这个解决方案:使用std::list<object*>
并从object
继承boost::enable_shared_from_this<>
。这样,当有人需要使用列表中的项目时,我会给他们object->shared_from_this()
。
我的问题如下:
boost::shared_ptr<>
相关联的shared_from_this()
是否考虑了对列表中对象的引用?我希望我的问题足够明确,并且有人能够帮助我。在列表中正确使用智能指针是我希望能够使用的。
谢谢
答案 0 :(得分:4)
删除shared_ptr
时,除非在其他地方没有使用,否则不删除真实对象。这是关于使用shared_ptr
的全部观点。
例如,如果您获取列表中的一个元素,复制它并将其提供给另一个函数,然后从列表中删除该元素,则不会删除该真实对象,因为它仍然在其他地方被引用。