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);
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.