我正在阅读有关空基优化(EBO)的信息。在阅读的过程中,我的脑海中突然出现了以下问题:
当 Empty 类对派生类没有任何贡献时(既不是功能方面的,也不是数据方面的),使用 Empty 类作为基类有什么意义?
在这篇文章中,我读到:
//S 为空
类 struct T : S
{
int x;
};[...]
请注意,我们没有丢失任何数据或代码准确性:当您创建类型 S 的独立对象时,对象的大小仍然像以前一样为 1(或更大);只有当 S 被用作另一个类的基类时,它的内存占用才会缩小到零。为了实现这种节省的影响,想象一个包含 125,000 个对象的向量。仅 EBO 就节省了半兆内存!
这是否意味着如果我们不使用“S”作为“T”的基类,我们必然会消耗双倍兆字节的内存?我认为,这篇文章比较了两种我认为不正确的不同场景。
我想知道一个真实的场景,当 EBO 被证明是有用的时。(意味着,在同样的场景中,如果我们不使用 EBO,我们必然会不知所措!)。
请注意,如果您的答案包含这样的解释:
关键是一个空类的大小不为零,但是当派生或派生它时,它的大小可以为零,那么我不是在问这个,因为我已经知道了。我的问题是,为什么有人首先会从一个空类中派生出他的类?即使他没有派生并且只是编写他的类(没有任何空基),他是否以任何方式不知所措?