QT 記憶體釋放

2021-09-30 09:59:38 字數 938 閱讀 9999

這裡是學習qt的一些學習記錄,主要是一些應該注意的 問題,至少是在我學初級qt程式設計時在曾在腦子裡浮現的一些問題,記錄在這裡。供自己查閱,另方便別人。

1.          在棧上用new分配的記憶體,為什麼沒有用delete釋 放?

從helloqt說起

#include <

>

#include <

qlabel.h

>

int main( int argc, char **ar** )
這裡label是new出來的乙個指標變數,也就是在棧上申請的記憶體,在c++語言 裡,明確過,在棧上分配的記憶體是必須認為的用delete釋放的,防止記憶體洩露。這裡為什麼沒有呢。後來看到有的qt程式也有明確使用delete釋 放記憶體的。這裡越發不解了。後來,查到原來是qt擴充套件了c++,如果指標物件有父物件時,可以不用顯式釋放記憶體。我們需要顯式釋放的是那些沒有父物件的孤立的指標。但 上面這個例子並沒有繼承父物件,注意第二個指標,指向父物件的指標引數為0,即沒有 父物件,但是setmainwidget把它設為了主視窗部件,它就和程式同步了,當程式退出的時候自動 釋放,孩子物件的釋放也是如此,在qt中擴充套件了c++ ,如果父親物件無效時,子物件自動釋放分配的記憶體。

2.          關於前置宣告的說明

前置宣告是c++ 的乙個特性,不過我是在學qt時才 接觸到。這裡有一些說明。

class qcheckbox;

class myclass:public qdialog ;

這裡定義了乙個示例 類,繼承於qdialog,其中用q_object巨集是因為宣告的類定義了自己的signals,其中第二行就是一種前置宣告,因為私有成員裡用到了此類,這種方法 比#include 編 譯速度要快,注意私有成員為乙個指標,如果是個私有物件而不是指標的話就不能用這種前置宣告。具體的理由可以參考c++關於前置宣告的說明,這裡只是乙個提醒

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

用過qt的朋友都知道,繼承自qobject的子類,只要delete父物件可以自動delete父物件的所有子物件,今天我們來用幾行 模擬一下 include class a virtual a protected void addchild a chlid private qlistm lstchil...

mysql記憶體釋放 MySQL記憶體不釋放

歡迎進入linux社群論壇,與200萬技術人員互動交流 進入 連線了一下,並進行了一次查詢操作 root nj 245 thu apr 24 16 38 38 2014 information schema select count from client statistics count 5 1 ...

釋放記憶體總結

1.用new malloc顯式分配在堆上的記憶體才需要用delete free釋放,而在棧上分配的如int array 80 在子程式結束時自動釋放,分配與釋放都和資料型別無關。2.delete乙個指標的時候 一定要檢查是否為null,否則是個嚴重的應用程式錯誤.3.釋放乙個陣列要用delete 4...