为什么在多重继承(没有虚拟关键字)的情况下,大多数派生类的大小都会增加?

时间:2016-06-13 05:46:58

标签: c++ inheritance virtual sizeof

我执行了下面的代码,其中A,B和C类的大小是1,这是有道理的,因为空类的大小是1.但D的大小是2.这怎么可能?

class A{};
class B : public A{};
class C : public A{};
class D : public B, public C{};
int main()
{
cout<<"Size of A is "<<sizeof(A)<<endl;
cout<<"Size of B is "<<sizeof(B)<<endl;
cout<<"Size of C is "<<sizeof(C)<<endl;
cout<<"Size of D is "<<sizeof(D)<<endl;
return 0;
}

输出 A的大小为1,B的大小为1,C的大小为1,D的大小为2

当我执行A类以下的代码大小为1(空类)B的大小为8时(由于虚拟继承,我们将有Vptr,因此大小为8),C的大小为1(空类)。但是为什么D的大小是16,尽管C实际上并没有被继承。

class A{};
class B : virtual public A{};          //Virtual Inheritance
class C : public A{};                  //No Virtual Inheritance
class D : public B, public C{};
int main()
{
cout<<"Size of A is "<<sizeof(A)<<endl;
cout<<"Size of B is "<<sizeof(B)<<endl;
cout<<"Size of C is "<<sizeof(C)<<endl;
cout<<"Size of D is "<<sizeof(D)<<endl;
return 0;
}

输出 A的尺寸为1,B的尺寸为8,C的尺寸为1,D的尺寸为16

请帮我理解这一点。 提前致谢

0 个答案:

没有答案