在列表中正确使用boost :: shared_ptr

时间:2012-10-20 08:38:03

标签: c++ boost shared-ptr

我在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()是否考虑了对列表中对象的引用?

我希望我的问题足够明确,并且有人能够帮助我。在列表中正确使用智能指针是我希望能够使用的。

谢谢

1 个答案:

答案 0 :(得分:4)

删除shared_ptr时,除非在其他地方没有使用,否则不删除真实对象。这是关于使用shared_ptr的全部观点。

例如,如果您获取列表中的一个元素,复制它并将其提供给另一个函数,然后从列表中删除该元素,则不会删除该真实对象,因为它仍然在其他地方被引用。