Qt 銷毀機制

2021-09-29 02:10:34 字數 1094 閱讀 2795

首先了解這些對windows程式設計有更深入的理解,其實就是從qt在windwos上就是win32的擴充套件了一下,一般程式退出後,即使不delete你分配的記憶體,作業系統也會幫著**,qt有著半自動的**機制,為什麼是半自動呢?個人理解如下,qt中的一切事件,圖形等都是經過qobject派生出來的,每乙個qobject中都有乙個線性表,為什麼我會這麼理解呢?在寫程式的時候我們使用過findchild或者findchildren等 template..我就好奇了為什麼能找得出來,出於探求真理的目的,翻看了qobject。findchild原始碼如下:

template//乙個簡單的模板函式,

inline t findchild(const qstring &aname = qstring(), qt::findchildoptions options = qt::findchildrenrecursively) const

經過測試要使用他們的話必先要指定parent();由此我就可以分析出,其實每指定乙個parent,就會幫你新增乙個結點,從整個程式來看,這樣就形成了一顆樹樹樹!!於是我又想到,qt為什麼推薦使用delete later,因為它可以幫你刪除線性表上的子孫啊~delete反而可能造成記憶體洩漏,但從測試程式看出,delele並沒有造成內在洩漏且孩子也都完整的銷毀了。區別就是delete不會傳送deferreddelete訊息,而deletelater要發。 

一,在主視窗刪除的退出程式的時候,略有不同,大體是這樣乙個流程: 

1) 先給主視窗傳送乙個close 事件; 

2) 再傳送windowdeactivate(釋放視窗) 

3) 如果都顯示的話,兒子些全部都給我hide,hide的時候順序還有點怪,先從爹再從最小的兒子 

4) 最後再呼叫各自的析構就~順序有點不太能理解就是從都爹開始,孩子層級析構

二,普通的乙個object刪除大體是這樣的流程: 

1) 對刪除的目標傳送乙個deferreddelete事件,看文件說的是目標將被清除,當它整理好了後 

2) 如果都顯示的話,兒子些全部都給我hide,和上面那種一樣 

3) 再發乙個childremoved事件到它的爹那裡去。 

4) 呼叫各自的析構~

Qt之銷毀機制

首先了解這些對windows程式設計有更深入的理解,其實就是從qt在windwos上就是win32的擴充套件了一下,一般程式退出後,即使不delete你分配的記憶體,作業系統也會幫著 qt有著半自動的 機制,為什麼是半自動呢?個人理解如下,qt中的一切事件,圖形等都是經過qobject派生出來的,每...

Qt 銷毀機制個人理解

首先了解這些對windows程式設計有更深入的理解,其實就是從qt在windwos上就是win32的擴充套件了一下,一般程式退出後,即使不delete你分配的記憶體,作業系統也會幫著 qt有著半自動的 機制,為什麼是半自動呢?個人理解如下,qt中的一切事件,圖形等都是經過qobject派生出來的,每...

MFC視窗銷毀機制梳理

在乙個通常的程式中,先建立c 視窗物件,然後由windows建立實際的視窗結構,並返回控制代碼與c 物件連線。也就是說,視窗物件包含c 視窗物件和windows視窗,兩者通過控制代碼hwnd聯絡。物件清除是指釋放物件所佔的資源,視窗物件中windows視窗佔有的是系統資源,c 物件佔有的是記憶體資源...