其實這個是一個比較基礎的問題,因爲今天有人問我這個事情,我就拿出來稍微複習了一下,順便記錄一下。
題目是這樣的,解釋一下這個程序的運行過程:
首先需要明確:
- C++析構函數的調用順序與構造函數的調用順序相反。
- C++對象的生命週期與作用域相同。
調用過程:
- Test類聲明時順便定義了t0,沒有參數,使用默認參數,觸發0 cons。
- main裏首先定義t1,傳入參數1,覆蓋默認參數,觸發1 cons。
- 然後main裏定義t2,傳入參數2,覆蓋默認參數,觸發2 cons。因爲定義爲static,生命週期與該文件相同,最後銷燬。
- 然後main裏定義pt,傳入參數5,覆蓋默認參數,觸發5 cons。new創建對象和直接創建對象並沒有區別。
- 調用create():
- 在create裏定義t3,傳入參數3,覆蓋默認參數,觸發3 cons。
- 在create裏定義t4,傳入參數4,覆蓋默認參數,觸發4 cons。因爲定義爲static,生命週期與該文件相同,最後銷燬。
- create生命週期結束,調用棧彈出,t3離開作用域並銷燬,觸發3 des。
- t4是static的,暫不銷燬。
- 調用delete pt,銷燬pt,觸發5des。
- 然後main裏定義t6,傳入參數6,覆蓋默認參數,觸發6 cons。
- main()生命週期結束,開始銷燬:
- 銷燬t6,觸發6 des。
- 銷燬t1,觸發1 des。
- 整個文件生命週期結束:
- 銷燬static的t4,觸發4 des。
- 銷燬static的t2,觸發2 des。
- 程序結束。