sizeof(空类/空结构体) = 1;
#include <iostream> using namespace std; // 空类 class ClassA { }; // 继承空类的空类 class ClassB : public ClassA { }; // 空结构体 struct StructC { }; // 主函数 int main() { cout<<"A: "<<sizeof(ClassA)<<endl; cout<<"B: "<<sizeof(ClassB)<<endl; cout<<"C: "<<sizeof(StructC)<<endl; return 0; }
测试结果:
空类,没有任何成员变量或函数,即没有存储任何内容;
但是由于空类仍然可以实例化,编译器就需给它分配内存空间,来指示类实例的地址。
这里编译器默认分配了一个字节(如:char),以便标记可能初始化的类实例,同时使空类占用的空间也最少(即1字节)。
深度探索c++对象模型中是这样说的: 那是被编译器插进去的一个char ,使得这个class的不同实体(object)在内存中配置独一无二的地址。 也就是说这个char是用来标识类的不同对象的。