簡單模擬Qt的子類記憶體釋放

2021-09-25 18:43:04 字數 837 閱讀 1726

用過qt的朋友都知道,繼承自qobject的子類,只要delete父物件可以自動delete父物件的所有子物件,今天我們來用幾行**模擬一下

#include class a

virtual ~a() }

protected:

void addchild(a *chlid)

private:

qlistm_lstchild;

};class b : public a

virtual ~b()

private:

int *p;

};int main(int argc, char *ar**)

簡單解釋一下上面的**

qlist這個標頭檔案不重要,這裡主要是個鍊錶,可以用qt的,也可以用stl的,也可以用自己寫的

**的主要思想是在a類中記錄乙個子物件的指標鍊錶,當父物件delete的時候,遍歷自己的子物件指標鍊錶,依次delete掉自己的所有子物件

在main函式中,首先new乙個父物件ch1,然後new乙個子物件ch2,設定其父物件為ch1

當delete ch1時,首先掉用ch1的b類的析構函式,釋放指標p,然後呼叫ch1的父類a的析構函式,在a的析構函式中遍歷自己的子物件指標鍊錶。

此例中只有乙個子物件ch2,遍歷到ch2的指標時,delete掉ch2的指標,在該過程中,首先呼叫ch2的b類虛構函式釋放掉ch2的b類p指標,然後呼叫ch2的a類的析構函式,發現ch2沒有子物件,釋放掉ch2的a類後delete掉ch2指標這一過程結束,然後繼續釋放ch1的a類記憶體,知道ch1釋放完成

這樣就可以只通過釋放ch1的記憶體去釋放ch2的記憶體。

QT 記憶體釋放

這裡是學習qt的一些學習記錄,主要是一些應該注意的 問題,至少是在我學初級qt程式設計時在曾在腦子裡浮現的一些問題,記錄在這裡。供自己查閱,另方便別人。1.在棧上用new分配的記憶體,為什麼沒有用delete釋 放?從helloqt說起 include include qlabel.h int ma...

Vector的記憶體釋放

最近跑乙個程式,結果2g記憶體用完了,結果也沒算出來,出現std bad alloc,應該是程式中某個地方記憶體空間沒有及時釋放,開始檢查程式。發現好多地方用到vector,而且有些會很大,並且只是中間結果,只是因為需要在多個地方訪問,定義為了類的成員變數,要等到這個類解析的時候才釋放空間,看來應該...

STL string的記憶體釋放

很久都沒有發原創部落格了,今天來談談自己對stl中的string類的理解。雖然一直不是很喜歡用c 但是經過實習和工作這段時間的鍛鍊,可能c 已經成為了我最熟練的語言了。說到c 用到最大的東東,那就是stl了。神馬string vector set map呀的,是用的最多的了。廢話少說了,string...