1. 程式人生 > >QT——delete詳解

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)