我有一個管理多個「子」對象的生命週期的「父」對象。這些對象做了一些事情,並且在它們完成之後,它們通過回調信號通知其父(通過回調)它們已經完成並且可以被銷燬。如何在自己的回調中銷燬對象
,一種玩具,例如:
#include <list>
class Child;
class IChildListener
{
public:
virtual void on_done(Child *child) = 0;
};
class Child
{
public:
Child(IChildListener *parent)
: m_parent(parent)
{
}
void do_stuff()
{
m_parent->on_done(this);
}
protected:
IChildListener *m_parent;
};
class Parent : public IChildListener
{
public:
void on_done(Child* child) {
m_children.remove(child);
delete child;
}
Child *create_child() {
Child* child = new Child(this);
m_children.push_back(child);
return child;
}
protected:
std::list<Child*> m_children;
};
int main(int argc, char** argv) {
Parent p;
Child *c = p.create_child();
c->do_stuff();
}
的問題是,實際上是孩子自己的方法的調用期間被毀,這肯定不是一個好主意。有這樣的事情嗎?
參見http://stackoverflow.com/questions/3150942/c-delete-this – 2014-12-04 21:54:12