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