我有一个课程,它拥有它的孩子的所有权:
class Child
{
public:
Child() {}
~Child() {}
};
class Parent : public QObject
{
Q_OBJECT
public:
explicit Parent(QObject *parent = 0): QObject(parent) {}
~Parent()
{
qDeleteAll(m_children);
}
void addChild(Child *ch)
{
m_children.append(ch);
}
private:
QList<Child *> m_children;
};
Run Code Online (Sandbox Code Playgroud)
Child删除后,Parent使用addChild方法添加到类中的实例将Parent被删除.
以下使用将导致双子女破坏:
int main()
{
{
Parent father;
Child child;
father.addChild( &child );
}
//child is out of scope now and gets destroyed
//father gets destroyed too
//father's destructor deletes child AGAIN!
//crash! …Run Code Online (Sandbox Code Playgroud)