關於C++的構造函數與析構函數的調用順序

其實這個是一個比較基礎的問題,因爲今天有人問我這個事情,我就拿出來稍微複習了一下,順便記錄一下。

題目是這樣的,解釋一下這個程序的運行過程:
在這裏插入圖片描述
首先需要明確:

  1. C++析構函數的調用順序與構造函數的調用順序相反。
  2. C++對象的生命週期與作用域相同。

調用過程:

  1. Test類聲明時順便定義了t0,沒有參數,使用默認參數,觸發0 cons。
  2. main裏首先定義t1,傳入參數1,覆蓋默認參數,觸發1 cons。
  3. 然後main裏定義t2,傳入參數2,覆蓋默認參數,觸發2 cons。因爲定義爲static,生命週期與該文件相同,最後銷燬
  4. 然後main裏定義pt,傳入參數5,覆蓋默認參數,觸發5 cons。new創建對象和直接創建對象並沒有區別。
  5. 調用create():
    1. 在create裏定義t3,傳入參數3,覆蓋默認參數,觸發3 cons。
    2. 在create裏定義t4,傳入參數4,覆蓋默認參數,觸發4 cons。因爲定義爲static,生命週期與該文件相同,最後銷燬
    3. create生命週期結束,調用棧彈出,t3離開作用域並銷燬,觸發3 des。
    4. t4是static的,暫不銷燬。
  6. 調用delete pt,銷燬pt,觸發5des。
  7. 然後main裏定義t6,傳入參數6,覆蓋默認參數,觸發6 cons。
  8. main()生命週期結束,開始銷燬:
    1. 銷燬t6,觸發6 des。
    2. 銷燬t1,觸發1 des。
  9. 整個文件生命週期結束:
    1. 銷燬static的t4,觸發4 des。
    2. 銷燬static的t2,觸發2 des。
  10. 程序結束。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章