gpt4 book ai didi

c++ - Diamond Inheritance 中的虚表到底是为哪个类创建的?

转载 作者:太空狗 更新时间:2023-10-29 23:18:55 33 4
gpt4 key购买 nike

考虑以下代码片段:

class A
{
};

class B:public virtual A
{
};

class C:public virtual A
{
};

class D:public B,public C
{
};

int main()
{
cout<<sizeof(A)<<" "<<sizeof(B)<<" "<<sizeof(C)<<" "<<sizeof(D));
return 0;
}

我得到了 output作为:

1 4 4 8

由于 vptr 的创建,BC 类的大小为 4 个字节。这是否意味着 虚拟表 是为类 BC 创建的? A 呢?

一般来说,编译器在菱形继承中为哪些类创建虚拟表
创建虚拟表的决定是否特定于编译器?

请结合上述示例或任何其他更好的示例进行回答。

最佳答案

是的,具有虚拟基础的类需要某种类型的 vtable 或等价物。您需要某种机制来在运行时查找实际的基础子对象! (请记住,虚拟基础子对象是最派生对象的责任,而不是直接继承对象的责任。)

关于c++ - Diamond Inheritance 中的虚表到底是为哪个类创建的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11719275/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com