QObject 終身和所有權

與原生 C++的原始,唯一或共享指標相比,QObjects 具有自己的替代生命週期概念。

QObjects 可以通過宣告父/子關係來構建物件樹。

宣告此關係的最簡單方法是在建構函式中傳遞父物件。作為替代品,你可以通過呼叫 setParent 手動設定 QObject 的父級。這是宣告這種關係的唯一方向。你不能將子項新增到父類,但只能反過來。

QObject parent;
QObject child* = new QObject(&parent);

parent 現在在 stack-unwind 中被刪除時,child 也將被刪除。

當我們刪除 QObject 時,它將從父物件取消註冊自身;

QObject parent;
QObject child* = new QObject(&parent);
delete child; //this causes no problem.

這同樣適用於堆疊變數:

QObject parent;
QObject child(&parent);

在 stack-unwind 期間,child 將在 parent 之前被刪除,並從它的父節點取消註冊。

注意: 你可以使用相反的宣告順序手動呼叫 setParent,這破壞自動銷燬。