C 析構函式

2021-10-05 13:16:17 字數 748 閱讀 5150

於建構函式功能相反,析構函式不是完成物件的銷毀,區域性物件銷毀工作是由編譯器完成的。而物件在銷毀時會自動呼叫析構函式,完成類的一些資源清理工作

清理物件中的資源(從堆上申請的資源,開啟的檔案)

在物件的生命週期結束時,c++編譯器會自動呼叫析構函式,若使用者沒有顯式定義析構函式,則編譯器會自動生成預設析構函式,一般情況下在類中不涉及資源的管理可以不給出析構函式,但若在類中涉及資源管理就要使用者顯式的給出自定義析構函式

class string{

public:

string(char* str = "")//建構函式

{ cout執行結果: 

在student類中不析構函式沒有做什麼事,實際上是可以不用顯式給出的,在這裡給出是為了方便觀察函式呼叫的過程

(1)函式名為類名前加上「~」;

(2)析構函式無引數無返回值;

(3)乙個類有且只有乙個析構函式;

(4)若在內中沒有給出析構函式,則系統會自動生成預設的析構函式;

(5)物件生命週期結束時,c++編譯系統自動呼叫析構函式;

(6)析構函式的函式內部實現的並不是刪除物件,而是做一些清理工作;

(7)一般來講,若不需要進行特殊的清理工作(如動態釋放等),使用系統預設的析構函式即可。

C 析構函式 虛析構函式

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

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

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

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

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