C 學習筆記 類的析構函式

2021-06-27 07:42:35 字數 912 閱讀 3137

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

在c++中「~」是位取反運算子,從這點也可以想到,析構函式是與建構函式作用相反的函式。當物件的生命期結束時,會自動執行析構函式。

程式就會執行析構函式的幾種情況:

如果在乙個函式中定義了乙個物件(它是自動區域性物件),當這個函式被呼叫結束時,物件應該釋放,在物件釋放前自動執行析構函式。

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

如果定義了乙個全域性物件,則在程式的流程離開其作用域時(如main函式結束或呼叫exit函式) 時,呼叫該全域性物件的析構函式。

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

析構函式的作用並不是刪除物件,而是在撤銷物件占用的記憶體之前完成一些清理工作,使這部分記憶體可以被程式分配給新物件使用。程式設計者事先設計好析構函式,以完成所需的功能,只要物件的生命期結束,程式就自動執行析構函式來完成這些工作。

注意:析構函式不返回任何值,沒有函式型別,也沒有函式引數。因此它不能被過載。乙個類可以有多個建構函式,但只能有乙個析構函式。

實際上,析構函式的作用並不僅限於釋放資源方面,它還可以被用來執行「使用者希望在最後一次使用物件之後所執行的任何操作」,例如輸出有關的資訊。這裡說的使用者是指類的設計者,因為,析構函式是在宣告類的時候定義的。也就是說,析構函式可以完成類的設計者所指定的任何操作。

一般情況下,類的設計者應當在宣告類的同時定義析構函式,以指定如何完成「清理」的工作。如果使用者沒有定義析構函式,c++編譯系統會自動生成乙個析構函式,但它只是徒有析構函式的名稱和形式,實際上什麼操作都不進行。想讓析構函式完成任何工作,都必須在定義的析構函式中指定。

c 學習筆記 析構函式

宣告 註明 出處 析構函式 在建立物件的時候系統會自動呼叫建構函式,在物件需要被銷毀的時候同樣系統會自動呼叫乙個函式 析構函式與構造函式呼叫順序是反轉過來的,先呼叫建構函式的後呼叫析構函式。include using namespace std class test test private int...

C 類建構函式 析構函式 學習筆記

1 類的建構函式 類的建構函式是類的一種特殊的成員函式,它會在每次建立類的新物件時執行 建構函式的名稱與類的名稱是完全相同的,並且不會返回任何型別,也不會返回 void 建構函式可用於為某些成員變數設定初始值。include using namespace std class line 成員函式定義...

C 類析構函式

析構函式是c 釋放類物件的函式,如果在類中不寫析構函式,c 編譯器會自動補上析構函式。如果人為定義了析構函式,那麼會呼叫人為定義的。預設析構函式不會釋放成員指標變數所指向的記憶體空間,如果要釋放的話,還需要人為定義釋放。析構函式在物件釋放的時候自動呼叫,在delete 刪除物件的時候,也會呼叫析構函...