何時呼叫建構函式和析構函式

2021-06-20 01:17:08 字數 1465 閱讀 9740

建構函式的作用是保證每個物件的資料成員都有何時的初始值。

析構函式的作用是**記憶體和資源,通常用於釋放在建構函式或物件生命期內獲取的資源。

構造從類層次的最根處開始,在每一層中,首先呼叫基類的建構函式,然後呼叫成員物件的建構函式。析構則嚴格按照與構造相反的次序執行,該次序是唯一的,否則編譯器將無法自動執行析構過程。

全域性作用域中定義的物件,它們的建構函式是在檔案中所有其他函式(包括main)開始執行之前被呼叫的(但無法保證不同檔案的全域性物件建構函式的執行順序)。對應的析構函式是在終止main之後呼叫的。

自動區域性變數的建構函式是在程式的執行到達定義這個物件的位置時呼叫的,而對應的析構函式是在程式離開這個物件的作用域時呼叫的(即定義這個物件的**完成了執行)。每次執行進入和離開自動物件的作用域時,都會呼叫它的建構函式和析構函式。如果程式呼叫了exit或abort函式而終止,則不會呼叫自動物件的析構函式。

靜態區域性物件的析構函式只呼叫一次,即執行首次到達定義這個物件的位置時。對應的析構函式是在main終止或程式呼叫exit函式時呼叫的。

全域性物件和靜態物件是以建立它們時相反的順序銷毀的。如果程式由於呼叫了

exit

函式而終止,則不會呼叫靜態物件的析構函式。

分析:main函式中宣告了3個物件,second物件,fourth物件,是區域性自動物件,而third物件是乙個靜態區域性物件。當執行到達物件的宣告位置時,才會呼叫這些物件的建構函式。

當執行到達mian的末尾時,首先呼叫fourth物件的析構函式,然後是second物件的析構函式。由於third物件是靜態的,因此它會存活到程式終止。呼叫third物件的析構函式的時機,是在呼叫全域性物件first的析構函式之前,但在所有其他物件被銷毀之後。

create函式宣告了3個物件,其中fifth和seventh是區域性自動物件,sixth是靜態區域性物件。當create終止時,首先呼叫seventh物件的析構函式,然後是fifth物件的析構函式。由於sixth物件是靜態的,因此它會存活到程式終止。呼叫sixth物件的析構函式的時機,是在呼叫third和first的析構函式之前,但在所有其他物件被銷毀之後。

何時呼叫拷貝建構函式

拷貝建構函式是一種特殊的建構函式 拷貝建構函式是由編譯器呼叫,用來完成一系列基於同一類的其他物件的構件及初始化。拷貝建構函式的一般形式 類名 類名 變數名 函式體 拷貝建構函式的名稱必須和類名一致,形參必須是唯一的 不可改變的本型別的乙個引用型別的變數。拷貝構造函式呼叫的三種情況 物件以值傳遞的方式...

何時呼叫C 複製建構函式和拷貝建構函式

1.何時呼叫複製建構函式 複製建構函式用於將乙個物件複製到新建立的物件中。也就是說,它用於初始化過程中,而不是常規的賦值過程中。類的複製建構函式原型通常如下 class name const class name 它接受乙個指向類物件的常量引用作為引數。例如,string類的複製建構函式的原型如下 ...

構造和析構函式呼叫順序

c 中建構函式與析構函式的呼叫順序 c 建構函式和析構函式的呼叫順序 基類建構函式 物件成員建構函式 派生類本身的建構函式 派生類本身的析構函式 物件成員析構函式 基類析構函式 與構造順序正好相反 區域性物件,在退出程式塊時析構 靜態物件,在定義所在檔案結束時析構 全域性物件,在程式結束時析構 繼承...