gpt4 book ai didi

c++ - 为什么在虚拟继承的情况下类的大小更大?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:46:04 25 4
gpt4 key购买 nike

虚拟基类是一种在使用多重继承时防止给定类的多个实例出现在继承层次结构中的方法。然后对于下面的类

class level0 {
int a;
public :
level0();
};

class level10:virtual public level0 {
int b;
public :
level10();
};

class level11 :virtual public level0 {
int c;
public :
level11();
};

class level2 :public level10,public level11 {
int d;
public:
level2();
};

我得到了以下类(class)规模

size of level0 4

size of level10 12

size of level11 12

size of level2 24

但是当我从 level10 和 level11 的继承中删除 virtual 时,我得到了以下输出

sizeof level0 4

sizeof level10 8

sizeof level11 8

sizeof level2 20

如果虚拟继承阻止了基类的多个实例,那么为什么在虚拟继承的情况下类的大小更大?

最佳答案

因为当使用virtual 继承时,编译器会创建*一个vtable指向各种类的正确偏移量,并且指向该 vtable 的指针与类一起存储。


  • “将创建”——虚拟表不是由标准规定的,但虚拟继承所暗示的行为是。大多数编译器使用 vtables 来实现标准规定的功能。

关于c++ - 为什么在虚拟继承的情况下类的大小更大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17282979/

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