C 學習總結14 析構函式

2021-10-01 15:00:16 字數 1750 閱讀 1243

小記:靜默如初,安之若素

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 靜態建構函式 初始化靜態...