c 構造 析構順序

2021-06-29 10:36:49 字數 763 閱讀 9355

在建立class a的乙個物件的時候,拿new運算子來說,他總是會先去請求一塊該物件期望大小的記憶體,然後呼叫class a的建構函式並傳入所申請記憶體的位址作為this指標完成構造。

如果class a有其他類型別的成員變數,或者繼承自其他類的話,他們的構造順序又會是怎樣的呢?下邊是測試**:

class a

~a()

};class b

~b()

};class c

~c()

};class d: public a

~d()

private:

b b1;

c c1;

};void main()

執行結果:

從結果可以看出c++的構造順序:

1、呼叫父類的建構函式

2、按照宣告的順序依次構造成員

3、呼叫類本身的建構函式

析構順序:

1、呼叫類本身的析構函式

2、按照宣告的相反順序依次析構

3、呼叫父類的析構函式

至此,我們可以看出c++的構造和析構函式的呼叫順序是完全對稱的,即後構造的會先析構,整個過程類似乙個棧,藉此來保證物件的完整性。

還有,如果建構函式使用了初始化列表,如果順序和成員宣告順序不同,也還是會按照宣告順序構造,而且編譯器會給出警告。

C 多個物件構造 析構 構造和析構的順序

include 多個物件構造和析構 1 當類中有成員變數是其它類的物件時,首先呼叫成員變數的建構函式,呼叫順序與宣告順序相同 之後呼叫自身類的建構函式 2 析構函式的呼叫順序與對應的構造函式呼叫順序相反 2 類成員中若有const修飾,必須在物件初始化的時候,給const int n 賦值 當類成員...

C 建構函式 析構函式順序

1 輸入以下程式,分析執行結果。2 修改上面的4個類,新增析構函式,在析構函式中輸出各私有資料成員的值。並分析結果。實驗分析以及心得體會 主要是類的多繼承性,在繼承了多個基類之後,派生類物件呼叫的建構函式和析構函式的順序,以及在派生關係中同名函式的隱藏關係,根據實驗結果可以發現派生類物件在呼叫建構函...

C 類構造與析構順序

1.虛基類建構函式被呼叫,以繼承順序從左到右 如果存在虛基類 2.上一層非虛基類建構函式被呼叫,以繼承順序從左到右而非成員初值列上寫的順序 顯示呼叫或缺省構造 如果存在非虛基類 3.虛表指標指向適當虛表 如果類存在虛表指標 4.類資料成員初始化,以宣告的順序而非成員初值列上寫的順序。5.執行使用者所...