如果一个类的大小只有一个char 8,如果它实际上是继承的话,为什么呢?

时间:2016-05-30 15:05:11

标签: c++

我有这个

class Empty {};  // Empty class

class Derived : virtual public Empty
{
        char c;
};

在我的计算机上,sizeof(Derived);8,为什么?它不应该是1因为它只有1 char吗?

当我删除虚拟继承时,sizeof(Derived);1

1 个答案:

答案 0 :(得分:6)

  

在我的机器上,sizeof(Derived);是8,为什么?

因为这是编译器选择的内容。由于虚拟基础,对象的表示可能需要更多的内存。在典型的实现中,将有一个"虚拟表指针"在对象内。

  

它不应该是1,因为它只有1个字符?

没有。对象的大小不是" 应该是"它的成员大小的总和。