7 建構函式和析構函式被呼叫的時機

2021-09-29 22:11:51 字數 1068 閱讀 9350

以下例說明建構函式和西溝函式被呼叫的時機。

class

demo

~demo()

};demo d1(1

);void

func()

int main (

)func()

; cout <<

"main ends"

<< endl;

return0;

}/*輸出結果:

id=1 constructed 全域性變數d1被建立,之後進入main()函式。

id=4 constructed 執行demo d4(4);轉換構函式被呼叫。

id=6 constructed 執行d4 = 6;轉換建構函式被呼叫。生成乙個臨時變數(物件),並且將臨時變數賦值給d4

id=6 destructed 臨時變數(物件)

main 執行cout << "main" << endl;

id=5 constructed 進入區域性域中,執行demo d5(5); 轉換建構函式被呼叫

id=5 destructed 退出區域性域,區域性域中的d5物件被銷毀

id=2 constructed 執行func();執行static demo d2(2);建立乙個靜態區域性物件d2,轉換建構函式被呼叫

id=3 constructed 執行demo d3(3);轉換建構函式被呼叫,建立物件d3

func 執行cout << "func" << endl;

id=3 destructed 退出func()域,銷毀其中的區域性非靜態變數d3,但是區域性靜態變數d2不被銷毀

main ends 返回主函式,執行cout << "main ends" << endl;

id=6 destructed main()函式執行完畢。main()函式中區域性變數被銷毀。

id=2 destructed 靜態區域性變數被銷毀。

id=1 destructed 全域性變數被銷毀。

*/

注意:

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

先看看建構函式的呼叫順序規則,只要我們在平時程式設計的時候遵守這種約定,任何關於建構函式的呼叫問題都能解決 建構函式的呼叫順序總是如下 1.基類建構函式。如果有多個基類,則建構函式的呼叫順序是某類在類派生表中出現的順序,而不是它們在成員初始化表中的順序。2.成員類物件建構函式。如果有多個成員類物件則...

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

using system public class samplesarray public static class spublic static void c s 靜態類不能包含析構函式 public class apublic a a public class b apublic b b pub...

構造和析構函式呼叫順序

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