析構函式的呼叫

2021-06-18 05:11:49 字數 1017 閱讀 3519

看到這樣乙個例子:

class b

{private:

int data;

public:

b(){

cout<<"default constructor"<

destructed by parameter: 5

destructed

那麼都有哪些情況會呼叫析構函式呢?

1. 當用

new運算子動態地建立了乙個物件

,必須顯式用

delete運算子來釋放該物件

(以免造成記憶體洩露),此時

會呼叫該物件的析構函式

。另外,個人理解,new跟delete必須同時出現,new開闢新空間,delete釋放空間,否則會造成記憶體洩露。 2.

如果在乙個

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

static區域性物件在函式呼叫結束時物件並不釋放

,因此也不呼叫析構函式,

只在main函式結束或呼叫exit函式結束程式時,才呼叫static區域性物件的析構函式。

4.如果定義了乙個

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

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

看了一組簡單的例子,簡單容易理解,可以看看:

析構函式的作用並不僅限於釋放資源方面,它還可以被用來執行「

使用者希望在最後一次使用物件之後所執行的任何操作

」,例如輸出有關的資訊。這裡說的使用者是指類的設計者,因為,析構函式是在宣告類的時候定義的。也就是說,析構函式可以完成類的設計者所指定的任何操作。

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

析構函式的呼叫

多個類變數的函式共用記憶體,變數單獨存放在不同的記憶體空間中,析構函式會釋放這些記憶體空間 include include using namespace std class person person char p age 0 m person person p person char name,...

有關析構函式呼叫

如果在乙個函式中定義了乙個物件 它是自動區域性物件 當這個函式被呼叫結束時,物件應該釋放,在物件釋放前自動執行析構函式。static區域性物件在函式呼叫結束時物件並不釋放,因此也不呼叫析構函式,只在main函式結束或呼叫exit函式結束程式時,才呼叫static區域性物件的析構函式。如果定義了乙個全...

析構函式呼叫順序

設已經有a,b,c,d4個類的定義,程式中a,b,c,d析構函式呼叫順序為?c c voidmain 這道題主要考察的知識點是 全域性變數,靜態區域性變數,區域性變數空間的堆分配和棧分配 解題思路 其中全域性變數和靜態區域性變數時從靜態儲存區中劃分的空間 未初始化為bss,已初始化為資料段 二者的區...