建構函式 析構函式 虛析構函式

2021-08-24 18:20:26 字數 1946 閱讀 8170

說析構函式之前,先說下建構函式。

建構函式用來完成對物件的一系列初始化操作,主要作用有:

1.給建立的物件建立乙個識別符號

2.為物件資料成員開闢記憶體空間

3.完成物件資料成員的初始化

當並未顯示的定義建構函式時,會生成乙個預設的建構函式,預設建構函式不能完成物件資料成員的初始化,只能給物件建立一識別符號,並為物件中的資料成員開闢一定的記憶體空間。

例項1:

例項2:

例項3:

#include using namespace std;

class point

*/ point(int x = 0, int y = 0) :xpos(x), ypos(y)//使用初始化表進行初始化

編譯器會為物件生成乙個預設的析構函式,用於對成員撤銷時的一些清理工作。但預設生成的析構函式只能釋放類的普通成員所佔的空間,無法釋放通過new或malloc申請的空間,所以需要顯式的定義析構函式對這些申請的空間進行釋放,避免造成記憶體洩漏。

#include using namespace std;

class line

;line::line()

line::~line()

void line::setlength(double len)

double line::getlength()

int main()

#include using namespace std;

class base

; virtual ~base()

; virtual void dosomething() };

class derived :public base

; ~derived()

void dosomething() };

int main()

執行結果:

使用基類宣告的變數型別,指向派生類時,呼叫派生類的析構函式時同樣會呼叫基類的析構函式。

但是當去掉基類的虛析構函式前的virtual時,執行結果如下:

可知,並未對繼承類進行析構,則會造成記憶體洩漏,這就是虛析構函式的作用:當使用乙個基類的指標刪除乙個派生類的物件時,派生類的析構函式同樣會被呼叫。

C 建構函式 析構函式 虛析構函式

一般地,建立物件和刪除物件時,父類建構函式 子類建構函式 子類析構函式 父類析構函式。特例 如果用new建立了乙個物件,並將父類的指標指向這個子類的物件,那麼用delete撤銷物件時,系統只執行基類的析構函式,而不執行派生類的析構函式。如果希望按照子類析構函式 父類析構函式的順序執行,那麼應該將基類...

建構函式 析構函式 虛函式

在類中,建構函式用於初始化物件及相關操作。建構函式是不能宣告為虛函式的,因為虛函式對應乙個virtual table 虛函式表 這個表的位址是儲存在物件的記憶體空間的。而在執行建構函式前,物件尚未完成建立,記憶體都沒有被分配,所以無法去查詢虛函式表,它不存在,因此也就無法得知該呼叫哪乙個函式了。析構...

C 析構函式 虛析構函式

1.為什麼要定義虛析構函式?如果有乙個帶有虛函式功能的類,則它需要乙個虛析構函式,原因如下 1 如果乙個類有虛函式功能,它經常作為乙個基類使用 2 如果它是乙個基類,它的派生類經常使用new來分配 3 如果乙個派生類物件使用new來分配,並且通過乙個指向它的基類的指標來控制,那麼它經常通過乙個指向它...