查看单个帖子
  #11 (permalink)  
旧 2008-07-28
liuxinyu 的头像
liuxinyu liuxinyu 当前离线
高级会员
 
注册日期: 2006-02-09
帖子: 311
文章: 49
liuxinyu 正向着好的方向发展
默认 回复: 为什么会crash?

查了一下,
多继承的情况下,对象在构造时,依照深度优先,从左向右遍历继承树进行构造。
在析构时,按照和构造正好相反的顺序[1]

vtable是这样的,子类的memory layout中,有n个直接父类的vtable,每个vtable中都有一个dtor的指针,[2]这样,任何一个父类声明了vdtor,都可以正确调用到子类的dtor。然后,按照上述规则沿着继承树析构,依次调用所有父类的dtor

最后一步,就是按照pora描述的,调用子类的operator delete释放内存。

--
[1]: [25] Inheritance -- multiple and virtual inheritance, C++ FAQ Lite
[2]: Virtual method table - Wikipedia, the free encyclopedia

此帖于 2008-07-28 08:23 PM 被 liuxinyu 编辑.
回复时引用此帖