QT筆記之記憶體管理

2022-05-04 18:15:11 字數 1427 閱讀 6922

**: (鏈結錯誤解決辦法)

我們都知道在c++中,new和delete是成對出現的,那麼在qt中記憶體中是不是同樣如此呢,我們來驗證一下。

第一步新建工程: mywidget

第二步:新增乙個自定義的按鈕類(mybutton)

第三步:修改自定義按鈕類的父類為qpushbutton(qpushbutton也是繼承自qwidget),同時自定義按鈕類新增析構函式,並在析構函式裡列印輸出

mybutton.h

#ifndef mybutton_h

#define mybutton_h#include

class mybutton : public

qpushbutton

;#endif

//mybutton_h

mybutton.cpp

#include "

mybutton.h

"#include

mybutton::mybutton(qwidget *parent) :

qpushbutton(parent)

mybutton::

~mybutton()

第四步:在主視窗上建立顯示

#include "

mywidget.h

"#include

"mybutton.h

"mywidget::mywidget(qwidget *parent)

: qwidget(parent)

mywidget::~mywidget()

第五步:開始除錯,發生了鏈結錯誤

原因是moc沒有更新,無論怎麼重新構建,清理,構建都不行,用乙個笨辦法解決了:就是刪除專案同名資料夾下的除錯資料夾

然後重新除錯執行,成功了

第六步:關閉視窗,程式退出,看自定義按鈕類的析構函式是否被呼叫

可以看到列印出了 析構函式被呼叫。因此我們總結出,在qt中,有它自己的記憶體**機制,但也是有前提條件的:

1.動態建立的物件必須指定父物件

2.動態建立的物件直接或者間接繼承於qobject基類

QT之記憶體洩漏

以入門的hello world 為例 我們將 main.cpp 修改如下 include include intmain int argc,char ar 示例程式我們已經講解完畢。下面再說一點。我們可以將上面的程式改寫成下面的 嗎?include include intmain int argc,...

ios學習筆記之記憶體管理

一,記憶體管理型別定義 1,基本型別 任何c的型別,eg int,short,char,long,long long,struct,enum,union等屬於基本型別或結構體 記憶體管理對於c語言的基本型別無效 2,oc型別 非基本型別 任何繼承於nsobject類的物件都屬於oc型別 也就是除了c...

記憶體管理之記憶體定址

記憶體定址 三種記憶體位址 邏輯位址 logical address 包含機器語言指令中用來指定乙個運算元或一條指令的位址 線性位址 linear address 線性位址也稱為虛擬位址 virtual address 實體地址 physical address 用於記憶體晶元級記憶體單元定址,他們...