【发布时间】:2012-05-19 10:44:28
【问题描述】:
在涉及虚函数的虚拟继承的情况下,谁能解释一下类的大小。
class A{
char k[ 3 ];
public:
virtual void a(){};
};
class B : public A{
char j[ 3 ];
public:
virtual void b(){};
};
class C : public virtual A{
char i[ 3 ];
public:
virtual void c(){};
};
class D : public B, public C{
char h[ 3 ];
public:
virtual void d(){};
};
类大小的输出是:
sizeof(A): 8
sizeof(B): 12
sizeof(C): 16
sizeof(D): 32
我使用的编译器是
gcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)
【问题讨论】:
-
将 vptr 的大小添加到班级的大小中。更多详情 -> stackoverflow.com/questions/1604176/size-of-virtual-pointer-c
-
这些尺寸有什么让你吃惊的地方?
-
请记住,所有非空基础子对象都必须正确对齐。因此,如果您愿意,您可以考虑每个类都有一个 4 字节的成员对齐在 4。
-
@FredLarson...我知道多态类受虚拟指针影响的情况下的大小...但是虚拟继承的影响是什么?当我们虚拟继承时是否有任何隐藏指针??
-
@DumbCoder:没那么简单。虚拟表需要
vptr,但虚拟基需要额外的指针。
标签: c++ polymorphism virtual