由于空类的大小是1个字节,但是这个空类实际上是继承的(在gcc编译器上),答案sizeof(derived1)是8字节......,为什么会发生这种情况,sizeof(derived1)必须sizeof(char)+sizeof(virtual pointer)是1+ 4..ie 5字节.所以,从这个额外的3个字节到来的地方...... ???
#include <iostream>
using namespace std;
class Empty
{};
class Derived1 : virtual public Empty<br>
{
char c;
};
int main()
{
cout << "sizeof(Empty) " << sizeof(Empty) << endl;
cout << "sizeof(Derived1) " << sizeof(Derived1) << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
就C++标准而言,它都是未指定的,但通常虚拟继承会添加一个或两个指针,这反过来又会产生额外的对齐约束; 具有虚拟继承或虚函数的类的大小几乎肯定必须是指针大小的倍数(在大多数系统上为4或8).