語法
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來分配,並且通過乙個指向它的基類的指標來控制,那麼它經常通過乙個指向它...