C 學習之析構函式

2021-09-29 20:25:02 字數 1267 閱讀 2655

語法

class 類名

};

1)函式名一定是"~類名"

2)沒有返回型別,也沒有引數

3)不能被過載,即乙個類只能有乙個析構函式

當物件被銷毀時,析構函式將自動被呼叫

1)棧物件離開所在作用域時,析構函式被作用域終止的右花括號呼叫。

2)堆物件的析構函式被delete操作符呼叫。

注:delete物件時,會自動呼叫析構函式,在釋放物件自身的記憶體,而如果是free函式只會釋放自身記憶體不會呼叫析構函式.

#include

using

namespace std;

class

integer

void

print

(void

)const

~integer

(void

)private

:int

* m_pi;};

intmain

(void

)//->析構函式

cout <<

"test2"

<< endl;

return0;

}

如果乙個類自己沒有定義析構函式,那麼編譯器將會為該類提供乙個預設的析構函式

1)對於基本型別的成員變數,什麼也不做

2)對於類型別的成員變數(成員子物件),將會自動呼叫相應類的析構函式.

物件建立和銷毀的過程

1)建立

–》分配記憶體

–》構造成員子物件(按宣告的順序)

–》執行建構函式**

2)銷毀

–》執行析構函式**

–》析構成員子物件(按宣告的逆序)

–》釋放記憶體

#include

using

namespace std;

classa~

a(void)}

;classb~

b(void

) a m_a;

//成員子物件};

intmain

(void

)

執行結果:

注:在定義析構函式時,只要釋放掉本物件中,除成員子物件以外,申請動態記憶體的指標就可以,不必顯式地呼叫成員子物件的析構函式

C 學習之虛析構函式

類需要控制自己的物件執行一系列操作時發生什麼樣的行為,這些操作包括 建立 物件 拷貝 移動 賦值和銷毀。在繼承體系中,如果乙個類 基類或其派生的類 沒有定義拷貝控制操作,則編譯器將自動的為其合成乙個。即為合成的拷貝控制。在基類的拷貝控制中,由於繼承關係導致的最大影響就是 基類通常應該定義乙個 虛析構...

C 學習之建構函式 析構函式

在c 的類中,都會有乙個或多個建構函式 乙個析構函式 乙個賦值運算操作符。即使我們自己定義的類中,沒有顯示定義它們,編譯器也會宣告乙個預設建構函式 乙個析構函式和乙個賦值運算操作符。例如 宣告乙個空類 class empty 但是這個空類和下面這個類是等同的 class empty 預設建構函式 e...

C 析構函式 虛析構函式

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