跳转至

空基类优化

英文: 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

评论