程序员什么时候使用空基优化(EBO)

When do programmers use Empty Base Optimization (EBO)(程序员什么时候使用空基优化(EBO))

本文介绍了程序员什么时候使用空基优化(EBO)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在阅读有关空基优化 (EBO) 的内容.在阅读的过程中,我的脑海中浮现出以下问题:

  1. 它对派生类没有任何贡献(无论是功能方面还是数据方面)时,使用 Empty 类作为基类有什么意义?

  2. 在 这篇文章,我读了这个:

<块引用>

//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)

基础教程推荐