C 類物件在各種記憶體區的建構函式析構函式執行順序

2021-07-25 13:37:36 字數 674 閱讀 2403

首先乙個前提是,析構函式的執行順序和建構函式的執行順序是恰好相反的,即使如果建構函式的順序是 a,b,c ,那這三個類的析構函式的執行順序就是c,b,a

看**:

為什麼會這樣呢?

因為1.c++程式中,全域性物件是在主函式main執行之前就被初始化的,所以c類物件第乙個被建立

2.執行到main函式的時候,因為a先被new出來,所以a類物件第二個被建立,同理,b,d也被建立

3.那析構的時候,因為先呼叫了 delete pa,所以a類物件先被刪除,執行析構函式

4.接著就執行到了return 0,意味著函式結束了,當函式結束的時候,由於b物件是區域性變數,因此他會隨著函式的結束都釋放,因此b物件第二個執行析構函式。

5.由於靜態變數和全域性變數都建立在靜態儲存區,靜態儲存區是在程式結束才釋放,所以c,d是最後呼叫析構函式的,而為什麼是d先執行,因為建構函式是c先執行的。

析構函式的執行順序與建構函式相反,所以先d,再c

C 類物件的拷貝建構函式

c 類物件的拷貝建構函式 不祥 閱讀人次 條 對於普通型別的物件來說,它們之間的複製是很簡單的,例如 int a 100 int b a 而類物件與普通物件不同,類物件內部結構一般較為複雜,存在各種成員變數。下面看乙個類物件拷貝的簡單例子。include using namespace std cl...

String類的各種建構函式

編寫類string 的建構函式 析構函式和賦值函式,已知類string 的原型為 class string string的普通建構函式 string string const char str 6分 else 拷貝建構函式 string string const string other 賦值函式 ...

String類的各種建構函式

編寫類string 的建構函式 析構函式和賦值函式,已知類string 的原型為 class string string的普通建構函式 string string const char str 6分 else 拷貝建構函式 string string const string other 賦值函式 ...