面试真题

C++ · 困难 · 网易

菱形继承的内存模型,虚拟继承后会怎么样

困难 C++ 🎤 网易
参考答案
结论:菱形继承(如B、C继承A,D继承B和C)导致A子对象在D中有两份,引发二义性和空间浪费;虚拟继承使A成为虚基类,D中仅一份A实例。要点:1)非虚拟内存:D对象含B子对象(含A)和C子对象(含A),A成员重复;2)虚拟继承后:B、C各含虚基类指针(vbptr)指向虚基类表,表存偏移,共享同一A子对象;3)访问A成员需通过vbptr间接寻址,开销略增;4)构造顺序:虚基类优先构造。示例:sizeof(D)非虚拟为两份A+B+C,虚拟后含vbptr及单一A。
题目整理自公开面经,答案由校招宝自研生成,仅供参考