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
,這將破壞自動銷燬。