qt下,在删除Q类(QObject继承类)指针或Q类对象在析构的时候,同时会删除或析构他的子对象,这里的父子关系不是指继承关系,而是指构造时在构造函数的参数中指定的父类,或通过setParent()函数指定的父类。 QObject中的d_ptr指针中含有丰富的信息,其中包括父对象指针,及子对象,子子对象,子子子对象..构成的链表。Q类在构造的时候或setParent()函数中够成的父子关系都被保存在这些信息中,在删除Q类对象指针或类对象在析构的时候,会根据这些信息,同时删除或析构他的子对象,子子对象,直到删除到链表结尾。 例1: 删除parent时,child1和child2也会被删除。 QObject *parent = new QObject ; QObject *child1 = new QObject(parent) ;//child1是parent的子对象 QObject *child2 = new QObject(child1) ;//child2是child2的子对象,是parent的子子对象。 delete parent; 例2: Parent是继承于QObject的类,child是Parent的成员变量,Parent在析构的时候就不需要再删除指针child。 Parent::Parent() { child = new QObject(this); //child是Parent的子对象 } Parent::~Parent() { }
from: http://zhidao.baidu.com/link?url=7BSfzIuwx2QwiJVZO3QkTYrZCAlmK7f-b-FdsLkhNYVz7w6QakgzwaQ5iqXd9GeHTOj0R1bdaZtO-kRptQZOZK