QT 相關類記憶體管理

2021-10-11 03:07:25 字數 1070 閱讀 5204

qt記憶體自動釋放兩個前提條件:

(1)必須是qobject的派生類 ;

(2)必須指定了qt類parent物件,則,qt 中 父類被刪除的時候會自動銷毀子類。

注意:qt的析構順序先入先出,因此在指定父類時,需要如果建立在棧上(例項化產生,棧的特性「先入後出,**先出」),需要父類在前例項化,或是堆上(new實現);

如果,new出來的且沒有指定父物件,那麼則需要手動delete刪除它。

qt記憶體管理的繫結:

(1)指標的繫結

q_invokable qobject::qobject ( qobject * parent = 0 )

//建立乙個qobject物件時,如果指定了父物件,就會將物件指標新增到父物件的 children 列表中。

(2)指標的釋放

qobject::~qobject () [virtual]

//當乙個qobject物件析構時,它會將自己從父物件的 children 列表中移除(parent非0);

(3)與父物件的解除

void qobject::setparent ( qobject * parent )

//重新指定父類

qt關聯物件的記憶體管理:

(1)指定父物件後,交由父物件管理;

(2)qwidget相關:

頂層視窗呼叫---close:應用程式銷毀該視窗部件及子部件。

非頂層視窗---close:關閉時只是隱藏,不會被銷毀。

派生控制項類:繼承與qwidget物件,可以設定 qt::wa_deleteonclose 標誌位(當close時會析構該物件)。

(3)指定父物件,手動刪除:deletelater()

原理:qt 是事件驅動的,deletelater()會傳送乙個刪除事件到事件系統:

void qobject::deletelater()

參考:

(1)(2)

QT記憶體管理

使用new操作符來定義乙個物件 qvboxlayout layout new qvboxlayout window 另外一種方法 qvboxlayout layout window c 並沒有提供記憶體自動管理機制,通常,需要程式開發人員自己去做這些事情,比如在建構函式中使用了new去申請了乙個物件...

Qt的記憶體管理

在qt的程式中經常會看到只有new而不delete的情況,其實是因為qt有一套 記憶體的機制,主要的規則如下 1.所有繼承自qobject類的類,如果在new的時候指定了父親,那麼它的清理時在父親被delete的時候delete的,所以如果乙個程式中,所有的qobject類都指定了父親,那麼他們是會...

六 Qt記憶體管理

父子關係 所有指定了父物件的qt物件 繼承自qobject類的例項 與其父物件間存在父子關係 每個qt物件都儲存有指向其所有子物件的指標 每個qt物件都有乙個指向其父物件的指標 當指定 通過建構函式指定,或通過setparent函式 qt物件的父物件時 其父物件會在子物件鍊錶中加入指向該物件的指標 ...