C 預設析構函式

2021-07-11 20:25:14 字數 1011 閱讀 5064

1. 與建構函式一樣,假如我們不指定自己的析構函式,那麼編譯器將為我們建立乙個預設析構函式。

析構函式(destructor)

也是一種特殊的成員函式,沒有返回值,不需要使用者呼叫,而是在銷毀物件時自動執行。與建構函式不同的是,析構函式的名字是在類名前面加乙個」~「符號。

注意:析構函式沒有引數,不能被過載,因此乙個類只能有乙個析構函式。如果使用者沒有定義,那麼編譯器會自動生成。

2.呼叫建構函式進行型別轉換

我們可以把陣列當作物件賦給另乙個物件,這樣在對該複製表示式進行計算時,首先需要對數字進行型別轉換,同時判斷該類的建構函式的引數是否與數字的型別匹配,假如匹配則呼叫建構函式建立乙個臨時對戲那個,跟著將該臨時物件賦給賦值操作左邊的物件,最後呼叫析構函式刪除臨時物件。

#include

using namespace std;

class a 

xcode編譯器結果:

建構函式執行!99

99

建構函式執行!1000

執行析構函式刪除該物件

1000

建構函式執行!2

執行析構函式刪除該物件

2

建構函式執行!35

執行析構函式刪除該物件

執行析構函式刪除該物件

program ended with exit code: 0

說明執行析構函式的時候 內部變數已經不能列印出來了,至於和傳統的編譯器有什麼區別呢,我這個也不是很清楚。

預設析構函式 空函式?

如果是初級的c 入門書籍會告訴你,預設的構造和析構函式都是空函式,他不做任何操作。但實際情況是,嚴格上來說這句話是錯誤的。應該分情況討論如下 乙個類是plain old data型別的,即該類的建構函式和析構函式都是平凡的 trivial的 若該類的預設構造 析構函式存在,則他們是空函式。如果乙個類...

C 析構函式 虛析構函式

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

C 析構函式和虛析構函式。

析構函式如果不是虛的話,基類的析構函式將不會被呼叫。多型時,也就是派生類被基類指標所指,或者被基類別名 虛析構函式,被呼叫時,其自身的析構函式和基類的析構函式都將會被呼叫。非虛的時候,不進行多型,只有基類的會被呼叫。純虛析構函式 定義的時候除了加 0 還需要給出函式的實現。因為當遞迴的呼叫析構函式時...