空基类优化
英文: Empty Base Class Optimization, EBCO.
别名: Empty Base Optimization, EBO.
空类大小
类即使没有任何成员变量, 所实例化的对象也需要占据 1 字节的空间, 以确保对象的内存地址是独一无二的.
- 如果一个对象只占用 0 个字节的话, 会和下一个数据的内存地址冲突, 此时将无法通过内存地址区分这两个对象.
- 若两个对象的大小都为 0 字节, 将无法通过大小区分这两个对象.
- 若两个对象类型相同, 将无法通过
typeid
区分这两个对象.
因此空类实例化的对象大小为 0 可能会导致无法区分两个对象的问题, 将空类实例化的对象大小设为 1 便可以很自然的解决这个问题.
class A
{
};
class B : public A
{
};
class C : public A, public B
{
};
std::cout << sizeof(A) << std::endl; // 1
std::cout << sizeof(B) << std::endl; // 1
std::cout << sizeof(C) << std::endl; // 2