Qt 銷毀機制個人理解

2021-07-25 14:57:09 字數 1292 閱讀 1769

首先了解這些對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)呼叫各自的析構~

powered by:小烏龜在大烏龜背上

Qt 銷毀機制

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

Qt之銷毀機制

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

訊息列隊機制(個人理解)

歷史遺留 主線程不能被阻塞 問題 重新整理ui的 只能執行在主線程,執行在子執行緒是沒有任何效果的 解決問題 如果在子執行緒中重新整理ui,使用訊息列隊機制 提出方法 訊息列隊機制 looper一旦發現message queue中有訊息,就會把訊息取出,然後把訊息扔給handler物件,handle...