When do programmers use Empty Base Optimization (EBO)(程序员什么时候使用空基优化(EBO))
问题描述
我正在阅读有关空基优化 (EBO) 的内容.在阅读的过程中,我的脑海中浮现出以下问题:
当它对派生类没有任何贡献(无论是功能方面还是数据方面)时,使用 Empty 类作为基类有什么意义?
在 这篇文章,我读了这个:
<块引用>
//S为空
类结构 T : S
{
int x;
};
[...]
请注意,我们没有丢失任何数据或代码准确性:当您创建一个S 类型的独立对象,对象的大小仍然是 1(或更多)作为前;仅当 S 用作基数时另一个类的类做它的记忆足迹缩小到零.意识到这种节省的影响,想象一下包含 125,000 个的向量对象.仅 EBO 就可节省一半兆字节内存!
这是否意味着如果我们不使用S"作为T"的基类,我们必然会消耗两倍的内存吗?我认为,这篇文章比较了两种我认为不正确的不同场景.
我想知道当 EBO 被证明有用时的真实场景.(意思是,在同一场景中,如果我们不使用 EBO,我们必然会不知所措!).
请注意,如果您的回答包含这样的解释:
重点是一个空类的大小不为零,但是在派生或派生时它的大小可以为零,那么我不是问这个,因为我已经知道了.我的问题是,首先为什么有人会从一个空类派生他的类?即使他不派生并简单地编写他的类(没有任何空基),他是否有任何损失?
EBO 在 基于策略的设计,您通常私下从多个策略类继承.如果我们以线程安全策略为例,可以想象伪代码:
class MTSafePolicy{民众:void lock() { mutex_.lock();}void unlock() { mutex_.unlock();}私人的:互斥互斥_;};类 MTUnsafePolicy{民众:void lock() {/* 无操作 *
本文标题为:程序员什么时候使用空基优化(EBO)
基础教程推荐
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 设计字符串本地化的最佳方法 2022-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- C++,'if' 表达式中的变量声明 2021-01-01