最保险的做法就是:避免使用多继承

菱形继承

不使用虚继承,菱形继承的结果是:
虚继承 - 图1虚继承 - 图2

可以看到:在对象(Derive1)d1的内存布局中,成员int base0_1出现了重复;在类Derive1的虚表中,指向函数Base0::base0_func1(void)的条目出现了重复

虚继承

虚继承的使用方法如下:
虚继承 - 图3

Base0叫做虚基类。在对象(Derive1)d1中,只有一份关于Base0的内容。
Base1使用virtual来继承,可以理解为:愿意和其他类共享Base0的拷贝。