類 構造與析構執行順序詳解

2021-08-15 12:29:47 字數 1969 閱讀 4959

1.示例說明  以下面的程式說明函式的執行順序:

1)定義string類,構造和析構會列印其中的字串

2)定義乙個基類base,類中含有兩個string

3)從基類base派生出derive類,類中含有乙個string

每個類函式成員都會將執行函式名列印出來。

struct string

string(const string& s):str(s.str)

string(string&& s):str(std::move(s.str))

string& operator=(const string& s)

string& operator=(string&& s)

~string()

string str;

};//基類

struct base

string b("second");

return 0;

}//定義結果

string():first

string():tmp

~string():tmp

string():second

~string():second

~string():first

--------------------------------

process exited after 0.09922 seconds with return value 0

情形二:

陣列中,構造從底到高,析構從高到低

//陣列中列印

int main(int argc, char** argv)

return 0;

}//列印結果

string():first

string():second

~string():second

~string():first

--------------------------------

process exited after 0.1071 seconds with return value 0

情形三:容器中,構造和析構順序與具體容器實現有關係。
int main(int argc, char** argv) ;

cout<< "\nprint vec:";

for(auto &s :vec)

cout<< s.str << " ";

cout《情形五:類構造執行,成員按定義順序構造後再執行建構函式體,析構時,先執行析構函式體,再逆序銷毀成員;

構造順序從右到左int main(int argc, char** argv) {

base base(string("first"), string("second"));

cout<< "測試結束" <

情形六:派生類的構造:基類先構造,而析構則從派生類開始先析構//列印結果

string():third

string():second

string():first

string(const string& s):first

string(const string& s):second

base()

string(const string& s):third

derive()

~string():first

~string():second

~string():third

測試結束

~derive()

~string():third

~base()

~string():second

~string():first

--------------------------------

process exited after 0.1188 seconds with return value 0

C 類構造與析構順序

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

c 構造 析構順序

在建立class a的乙個物件的時候,拿new運算子來說,他總是會先去請求一塊該物件期望大小的記憶體,然後呼叫class a的建構函式並傳入所申請記憶體的位址作為this指標完成構造。如果class a有其他類型別的成員變數,或者繼承自其他類的話,他們的構造順序又會是怎樣的呢?下邊是測試 class...

繼承與包含中構造與析構的執行順序

hp 筆試題目 乙個類 a繼承類 b並且包含c,b中包含 d。在構造 a的時候,先構造b中的 d,再構造 b,然後構造a中的 c,最後構造 a。虛構的過程剛好相反。例子如下 include class idcart idcart class person person private idcart ...