有C++繼承關系:A派生B,B派生C
然后new C
最后delete C
一般給出的的順序是:構造A,構造B,構造C,析構C,析構B,析構A
這其中容易誤解.編譯器在new C和delete C中插入了自動代碼
真實的訪問順序是C,B,A,~C,~B,~A.
匯編調用結構如下:
C入口
| +call B入口
| | +call A入口
| | A后續指令(后續指令指構造函數體中第一條C++語句)
| +B后續指令
C后續指令
~C入口
~C后續指令
+call ~B
B后續指令
call ~A
A后續指令
詳情看反匯編吧.
---------------------------
這樣理解就對了,感謝玉清同學:
訪問順序當然是C,B,A..
但是構造順序是A,B,C