自动分离对象?

时间:2010-08-12 17:06:13

标签: c++

我有一个母类,它存储指向列表中某些对象的指针。我希望这些对象在被销毁时从列表中分离出来。 有人可以建议一些好方法吗?

2 个答案:

答案 0 :(得分:1)

粗略的方法是将容器引用(或指针)存储在列表中的对象中,并在其析构函数中删除它们自己:

class Contained;
class Container {
  std::list<Contained*> children;
public:
  ...
  void goodbye(Contained*);
};
class Contained {
  Container& c; // you set this in the constructor
public:
  ~Contained() { c.goodbye(this); }
};

请注意,这会使Contained类不可复制。

简单方法是使用一些已经提供此类功能的框架。例如。如果您使用Qt,您只需从Contained派生QObject类并将QPointer<Contained>存储在Container中。删除包含的对象后,QPointer将设置为零。

或者,如果您使用某些内存管理工具,例如boost::shared_pointer,(我假设Container不拥有Contained个对象,否则,它最好知道子对象何时死亡),你会使用Container中的弱指针,它具有类似的功能。

答案 1 :(得分:0)

你可以在这些类中添加对母类的引用/指针,当调用析构函数时,它们会调用mother.Detach(this)