QObjects come with their own alternative lifetime concept compared to native C++'s raw,unique or shared pointers.
QObjects have the possibility to build an objecttree by declaring parent/child relationships.
The simplest way to declare this relationship is by passing the parent object in the constructor. As an lternative you can manually set the parent of a QObject by calling setParent. This is the only direction to declare this relationship. You cannot add a child to a parents class but only the other way round.
QObject parent;
QObject child* = new QObject(&parent);
When parent now gets deleted in stack-unwind child will also be deleted.
When we delete a QObject it will "unregister" itself form the parent object;
QObject parent;
QObject child* = new QObject(&parent);
delete child; //this causes no problem.
The same applies for stack variables:
QObject parent;
QObject child(&parent);
child will get deleted before parent during stack-unwind and unregister itself from it's parent.
Note: You can manually call setParent with a reverse order of declaration which will break the automatic destruction.