我有这个
class Empty {}; // Empty class
class Derived : virtual public Empty
{
char c;
};
在我的计算机上,sizeof(Derived);
为8
,为什么?它不应该是1
因为它只有1 char
吗?
当我删除虚拟继承时,sizeof(Derived);
为1
。
答案 0 :(得分:6)
在我的机器上,
sizeof(Derived);
是8,为什么?
因为这是编译器选择的内容。由于虚拟基础,对象的表示可能需要更多的内存。在典型的实现中,将有一个"虚拟表指针"在对象内。
它不应该是1,因为它只有1个字符?
没有。对象的大小不是" 应该是"它的成员大小的总和。