C 中建構函式和析構函式的呼叫順序

2022-07-08 21:48:10 字數 1453 閱讀 8818

一般而言,析構函式呼叫的順序和構造函式呼叫順序相反,但是,物件的儲存類別可以改變呼叫析構函式的順序。舉例說明:

全域性作用域內定義的物件的建構函式,在檔案內任何其他函式(包括main函式)開始執行之前呼叫,當main函式執行結束時,相應的析構函式被呼叫,如上面的object 1.

exit函式迫使程式立即結束,不執行自動物件的析構函式。當程式中檢測到輸入中有錯誤,或者程式要處理的檔案不能開啟時,常常使用exit函式來終止程式。abort函式的執**況與exit

函式類似,但是迫使程式立刻終止,不允許呼叫任何物件的析構函式。通常使用abort函式指示程式的非正常終止。

當程式執行到自動區域性物件的定義處時,該物件的建構函式被呼叫;當程式執行離開物件的作用域時,相應的析構函式被呼叫。如果程式的終止是由呼叫exit函式或者abort函式完成,

那麼自動物件的析構函式將不被呼叫。

static 區域性物件的建構函式只呼叫一次,即在程式第一次執行到該物件的定義處時;而相應的析構函式的呼叫則發生在main函式結束或者程式呼叫exit函式。全域性或靜態物件的的撤銷

順序與它們建立的順序正好相反。abort函式的呼叫終止程式時,static物件的析構函式將不被呼叫。

在測試函式的第10行定義了全域性static物件first, 在main中任何語句執行之前,呼叫它的建構函式;而在執行所有其他物件的析構函式之後程式終止,呼叫它的析構函式。

物件second和fourth都是區域性自動物件,物件third是乙個static區域性物件。當程式執行到每個物件宣告處時,呼叫它們的建構函式;當程式執行到main函式結尾時,依次呼叫物件fourth和second的析構函式(與建構函式的呼叫順序相反)。因為物件third是static區域性物件,所以直到程式終止時,他才撤銷,即物件third的析構函式在全域性物件first的析構函式呼叫之前、在所有其它物件撤銷之後呼叫。

第25行的create函式宣告了3個物件:fifth和senventh是區域性自動物件,sixth是區域性static物件。程式執行到create函式結尾時,依次呼叫物件seventh和fifth的析構函式(與構造函式呼叫的順序相反)。由於sixth是static,因此直到程式終止時它才撤銷。sixth的析構函式的呼叫發生在third和first的析構函式之前及其它所有物件撤銷之後。

C 顯示呼叫建構函式和析構函式

建構函式和析構函式可不可以顯示呼叫 class a a void main 此時的輸出結果是 a constructor a constructor 顯示呼叫建構函式的結果。a destrucotr 顯示呼叫析構函式的結果,此時物件並沒有銷毀。a destructor 物件銷毀時自動呼叫析構函式。總...

C 顯示呼叫建構函式和析構函式

類在new的時候其實做了兩件事情 1 呼叫malloc分配所需的記憶體 實際上是呼叫operator new 2 呼叫建構函式 類在delete的時候其實也做了兩件事 1 呼叫析構函式 2 呼叫free釋放記憶體 實際上是呼叫operator delete 直接通過 類名 建構函式或析構函式clas...

C 建構函式 析構函式和拷貝構造的呼叫

建構函式是在建立給定型別的物件時執行的類方法。建構函式具有與類相同的名稱,它通常初始化新物件的資料成員。析構函式 destructor 與建構函式相反,當物件結束其生命週期,如物件所在的函式已呼叫完畢時,系統自動執行析構函式。析構函式往往用來做 清理善後 的工作。拷貝建構函式是一種特殊的建構函式,其...