QT——delete详解

1 Qt半自动的内存管理

Qt中已下情况new出的对象可以不用亲自去delete:
(1)QObject及其派生类的对象,如果其parent非0,则其parent析构时会析构该对象,除此之外,有些类的对象可以接收设置一些特别的标记,例如:
1) QWidget及其派生类的对象,可以设置Qt::WA_DeleteOnClose标志位(当close时会析构该对象)
2)QAbstractAnimation派生类的对象,可以设置QAbstractAnimation::DeleteWhenStopped
3)QRunnable::setAutoDelete()
4)MediaSource::setAutoDelete()

2 父子关系

在Qt中,每个QObject内部都有一个list,用来保存所有的children,还有一个指针,保存自己的parent。当它自己析构时,它会将自己从parent列表中删除,并且析构掉所有的children。
建立与解除

Q_INVOKABLE QObject::QObject(QObject)

创建一个QObject对象时,如果指定了父对象,它就会将自己添加到父对象的 children 列表中

QObject::~QObject () [virtual]

当一个QObject对象析构时,它会将自己从父对象的 children 列表中移除(parent非0的话)

void QObject::setParent ( QObject * parent )

通过该函数,将自己从原父对象的children中删除,添加到新parent的children列表中
注:这三个函数都是通过一个内部私有函数来实现的,这就是

QObjectPrivate::setParent_helper(QObject *o)

你可能感兴趣的:(qt)