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