多重继承下的对象内存布局
参考如下文章:
多重继承时的二进制兼容问题
class Sub : public Base1, public Base2, public Base3
{
.....
}
多重继承的情况下,Sub类的对象的内存布局中,会有三个虚表指针,分别指向Base1、Base2、Base3的虚表。
其中,Base1的虚表布局和Sub类的虚表布局会重合,也就是说,如果在Sub类中新添加一个虚函数,那么该虚函数会出现在第一个虚表中。
需要注意的是,如果Sub中重写(override)非第一基类(如Base2)中的虚函数,那么Sub中该虚函数仍然位于第一个虚表中(见如下编程验证)!
gdb分析多重继承下的子类对象内存布局
===========================================================================
#include <iostream>
using namespace std;