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