C++中空类占一字节原因详解 - XSH的博客 - CSDN博客
https://blog.csdn.net/xiong452980729/article/details/71077144
在C++中空类会占一个字节,这是为了让对象的实例能够相互区别。具体来说,空类同样可以被实例化,并且每个实例在内存中都有独一无二的地址,因此,编译器会给空类隐含加上一个字节,这样空类实例化之后就会拥有独一无二的内存地址。如果没有这一个字节的占位,那么空类就无所谓实例化了,因为实例化的过程就是在内存中分配一块地址。
注意:当该空白类作为基类时,该类的大小就优化为0了,这就是所谓的空白基类最优化。
#include<iostream>
using namespace std;
class test
{
};
int main()
{
test a, b;
cout << "sizeof(test): " << sizeof(test) << endl;
cout << "addr of a: " << &a << endl;
cout << "addr of b: " << &b << endl;
system("pause");
return 0;
}
这个占位字节仅仅是用来占位。
空白基类最优化:
#include<iostream>
using namespace std;
class test
{
};
class derive :public test
{
private:
int a;
};
int main()
{
test a, b;
cout << "sizeof(test): " << sizeof(test) << endl;
cout << "sizeof(derive): " << sizeof(derive) << endl;
cout << "addr of a: " << &a << endl;
cout << "addr of b: " << &b << endl;
system("pause");
return 0;
}