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,这破坏自动销毁。