QObject 终身和所有权
与原生 C++的原始,唯一或共享指针相比,QObjects 具有自己的替代生命周期概念。
QObjects 可以通过声明父/子关系来构建对象树。
声明此关系的最简单方法是在构造函数中传递父对象。作为替代品,你可以通过调用 setParent
手动设置 QObject
的父级。这是声明这种关系的唯一方向。你不能将子项添加到父类,但只能反过来。
QObject parent;
QObject child* = new QObject(&parent);
当 parent
现在在 stack-unwind 中被删除时,child
也将被删除。
当我们删除 QObject
时,它将从父对象取消注册自身;
QObject parent;
QObject child* = new QObject(&parent);
delete child; //this causes no problem.
这同样适用于堆栈变量:
QObject parent;
QObject child(&parent);
在 stack-unwind 期间,child
将在 parent
之前被删除,并从它的父节点取消注册。
注意: 你可以使用相反的声明顺序手动调用 setParent
,这将破坏自动销毁。