的笔记

随时随地编辑

C++继承类中构造函数与析构函数的容易误解的地方

有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

posted on 2013-03-29 23:46 的笔记 阅读(735) 评论(1)  编辑 收藏 引用 所属分类: C++

评论

# re: C++继承类中构造函数与析构函数的误解 2013-03-30 00:11 杨漱玉青

喵喵喵~~晚安~~  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理