C 析構函式

2021-08-21 07:33:51 字數 695 閱讀 2686

析構函式也是乙個特殊的成員函式,它的作用與建構函式相反,它的名字是類名的前面加乙個 ~ 符號。

當物件的生命期結束時,會自動執行析構函式,如一下情況:

函式中定義乙個物件,當這個函式呼叫結束,物件應該被釋放,物件釋放前自動執行析構函式

static區域性物件在函式呼叫結束時物件並不釋放,只在main函式結束或呼叫exit函式時,才呼叫static區域性物件的析構函式

如果定義了乙個全域性物件,則在程式的流程離開其作用域時,呼叫該全域性物件的析構函式

如果用new運算子動態地建立乙個物件,當用delete運算子釋放該物件時,呼叫該物件的析構函式

析構函式不返回任何值,沒有函式型別,也沒有函式引數,因此不能被過載。

乙個類可以有多個建構函式,但只能有乙個析構函式。

如果使用者沒有定義析構函式,c++編譯系統自動生成乙個析構函式,但它只有析構函式的名稱和形式,實際上什麼操作也不執行

建構函式和析構函式的呼叫時機:

在全域性範圍中定義的物件,它的建構函式在檔案中的所有函式(包括main函式)執行之前執行,當main函式執行完畢或呼叫exit函式時,呼叫析構函式

如果呼叫的是區域性自動物件,則在建立物件時呼叫其建構函式,函式呼叫結束,物件釋放前呼叫析構函式。

如果在函式中定義靜態區域性物件,只在程式第一次呼叫此函式時呼叫建構函式一次,呼叫結束時物件並不釋放,只在main函式結束或呼叫exit函式時,才呼叫析構函式。

C 析構函式 虛析構函式

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

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

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

C 建構函式 析構函式 虛析構函式

一般地,建立物件和刪除物件時,父類建構函式 子類建構函式 子類析構函式 父類析構函式。特例 如果用new建立了乙個物件,並將父類的指標指向這個子類的物件,那麼用delete撤銷物件時,系統只執行基類的析構函式,而不執行派生類的析構函式。如果希望按照子類析構函式 父類析構函式的順序執行,那麼應該將基類...