QT对象之间可以存在父子关系,每一个对象都可以保存它所有子对象的指针,每一个对象都有一个指向其父对象的指针。当指定QT对象的父对象时,父对象会在子对象链表中加入该对象的指针,该对象会保存指向其父对象的指针。当QT对象被销毁时,将自己从父对象的子对象链表中删除,将自己的子对象链表中的所有对象销毁。QT对象销毁时解除和父对象之间的父子关系,并销毁所有的子对象。
C++中 delete 和 new 必须配对使用,如果delete少了,则内存泄露,多了麻烦更大。而Qt中使用了new却很少delete,就是基于对象树模型。当parent被delete时,这个parent的相关所有child都会自动delete,不用用户手动处理。
但是这里也有问题需要我们去考虑,parent是不会区分它的child是new出来的还是在栈上分配的。这体现delete的强大,可以释放掉任何的对象,而delete栈上对象就会导致内存出错,这就需要我们去了解Qt的半自动内存管理。
还有另一个问题是child不知道它自己是否被delete掉了,所以可能会出现野指针。这就需要我们去了解Qt的智能指针