Empty Base Optimization (EBO) について読んでいました。読んでいて、次のような疑問が頭に浮かびました。
派生クラスに何も貢献しない場合 (機能的にもデータ的にも)、空のクラスを基本クラスとして使用するポイントは何ですか?
この記事で、私はこれを読みました:
//S は空
のクラス struct T : S
{
int x;
};[...]
データやコードの精度は失われていないことに注意してください。タイプ S のスタンドアロン オブジェクトを作成する場合、オブジェクトのサイズは以前と同様に 1 (またはそれ以上) のままです。S が別のクラスの基本クラスとして使用される場合にのみ、そのメモリ フットプリントはゼロに縮小されます。この節約の影響を理解するには、125,000 個のオブジェクトを含むベクトルを想像してください。EBO だけで、0.5 メガバイトのメモリを節約できます。
「S」を「T」の基本クラスとして使用しない場合、必然的に 2 倍のメガバイトのメモリを消費するということですか? この記事は、私が正しくないと思う 2 つの異なるシナリオを比較していると思います。
EBOが有用であると証明できる実際のシナリオを知りたいです。
回答に次のような説明が含まれている場合は注意してください。
全体的なポイントは、空のクラスのサイズがゼロではないということですが、派生または派生するときにサイズがゼロになる可能性があるため、既に知っているので、それを求めていません。私の質問は、そもそも空のクラスから自分のクラスを派生させるのはなぜですか? 彼がクラスを派生せずに (空のベースなしで) 単純に記述したとしても、彼は何か途方に暮れていますか?