2

我有一个与boost::shared_ptr<>C++ 相关的问题。我目前愿意智能删除列表中的项目:

  • 如果该项目正在使用中,请不要执行任何操作,稍后将其删除
  • 如果该项目未使用,请将其删除

这是我的程序要求的行为。

我真的很想知道如何正确地做到这一点,因为std::list<boost::shared_ptr<object> >删除/擦除功能会导致shared_ptr<>实际对象的删除和删除。

所以我终于想出了这个解决方案:使用 astd::list<object*>并继承objectboost::enable_shared_from_this<>. 这样,当有人需要使用列表中的某个项目时,我会给他们object->shared_from_this().

我的问题如下:

  • 这会尊重期望的行为吗?
  • boost::shared_ptr<>关联的 to是否shared_from_this()考虑到对列表中对象的引用?

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

谢谢

4

1 回答 1

4

当您删除 a 时,shared_ptr您不会删除真实对象,除非它没有在其他任何地方使用。这就是使用shared_ptr.

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

于 2012-10-20T08:46:10.617 回答