小記:靜默如初,安之若素
1. 語法
class 類名
//負責清理物件建立時的動態資源
};
1)函式名必須是」~類名「;
2)沒有返回型別,也沒有引數,也無法過載;
2. 當物件銷毀時,該類的析構函式會自動的被執行
1)棧物件當離開其作用域時,其析構函式被作用域終止的右花括號」}「呼叫;
2)堆物件的析構函式被delete操作符呼叫。
1 #include
2using
namespace std;34
class
integer512
~integer
(void)13
1718
void
print
(void
)const
1922
23private:24
int*m_data;
//指標一定要注意最後釋放,否則造成記憶體洩露25}
;2627int
main
(int argc,
char
*ar**)
28//-->呼叫析構函式
41 cout <<
"tes2"
<< endl;
42return0;
43}~
3. 如果乙個類沒有顯示定義析構函式,那麼系統會為該類提供乙個預設的析構函式:
1)對於基本型別的成員變數,什麼也不做;
2)對於類型別的成員變數(成員子物件),會自動呼叫相應類的析構函式;
1 #include
2using
namespace std;34
classa5
11~a(
void)12
15};16
17classb18
;3031int
main
(int argc,
char
*ar**)
32 執行結果:
a::a(
)~a::a(
)
4. 物件建立和銷毀過程
1)建立
1.1)分配記憶體
1.2)構造成員子物件(按照宣告順序)
1.3)執行建構函式**
2)銷毀
2.1)執行析構函式**
2.2)析構成員子物件(按宣告逆序)
2.3)釋放記憶體
1 #include
2using
namespace std;34
classa5
11~a(
void)12
15};16
17classb18
24~b(
void)25
28 a m_a;
//類型別的成員變數29}
;3031int
main
(int argc,
char
*ar**)
32執行結果:
a::a()
b::b()
~b::b(
)~a::a(
)
析構函式總結
1.基類如果析構函式不為protected,那麼最好加上virtual 讓其delete 基類指標 實現多型 2.如果基類析構函式為protected,可以這樣使用 基類的構造,拷貝構造,基類 operaotr 基類指標 均為protected,不直接產生 銷毀基類。可以提供乙個虛函式去銷毀 效率比...
C 析構函式 虛析構函式
1.為什麼要定義虛析構函式?如果有乙個帶有虛函式功能的類,則它需要乙個虛析構函式,原因如下 1 如果乙個類有虛函式功能,它經常作為乙個基類使用 2 如果它是乙個基類,它的派生類經常使用new來分配 3 如果乙個派生類物件使用new來分配,並且通過乙個指向它的基類的指標來控制,那麼它經常通過乙個指向它...
C 學習 構造 析構函式
一.建構函式 何時呼叫建構函式 class1 cl new class1 new運算子為物件分配記憶體,然後再呼叫物件的建構函式。1 建構函式 無返回值 與類同名,可以過載,在生成類的例項時呼叫,可以初始化字段,當然也可以加入 獲取目前生成的例項數 class mode 2 靜態建構函式 初始化靜態...