【问题标题】:Add and remove itself from container从容器中添加和删除自身
【发布时间】:2015-03-26 08:30:50
【问题描述】:

我有一个班级Drawable 和一个班级DrawableManagerDrawableManager 应该有一个指向Drawables 的指针容器,它可以在其中查找Drawable 对象的属性并适当地绘制它们。

现在我希望 Drawable 对象在创建时将自己添加到 DrawableManager 并在删除时将自己删除。这样的事情可能吗?如果是,可以这样做还是有更好的方法?

我现在拥有它的方式是shared_ptrs 到Drawable 对象和DrawableManagervectorweak_ptrs 到这些对象,我手动将对象添加到管理器.不过我希望这个过程自动化。

【问题讨论】:

  • 你可以在 Drawable 构造函数/析构函数中添加/删除它们
  • @Iosif Murariu:这就是我想要实现的目标。
  • 自定义删除器怎么样?请参阅 this answerother similar question

标签: c++ containers c++14


【解决方案1】:

好吧,您可以将DrawableManager* 传递给Drawable 构造函数,它会添加自己,然后在析构函数中将自己删除。请注意,在这些时候,它的动态类型将是 Drawable 而不是派生类型,因此请注意不要调用虚方法作为添加的直接结果。

但是,我建议您不要这样做。将存在与成员身份分开通常很有用,有一个Drawable,它不是“DrawableManger”的一部分(顺便说一下,请参阅http://blog.codinghorror.com/i-shall-call-it-somethingmanager/)。 “自动化”流程消除了这种灵活性,基本上不会赢得可用性。

【讨论】:

  • 我已经将 ´DrawableManager &` 传递给构造函数,所以我可以轻松添加它。我想知道的是它如何从析构函数的管理器中删除自己。
  • 但是是的,我会考虑分离会员的存在,谢谢。
  • @gartenriese 要删除它,只需在Drawable 中按住指向DrawableManager 的指针。您也可以使用侵入式容器,但这可能比它的价值更麻烦。
  • 我想我会把它分开,它更简单,可能更好。 :-)
猜你喜欢
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 2018-05-27
  • 1970-01-01
  • 1970-01-01
  • 2020-05-27
相关资源
最近更新 更多