有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