空基優化

即使型別為空 class 型別(即,沒有非靜態資料成員的 classstruct),任何物件或成員子物件的大小必須至少為 1,以便能夠保證相同型別的不同物件的地址始終是不同的。

但是,基礎 class 子物件不是那麼受約束,可以從物件佈局中完全優化:

#include <cassert>

struct Base {}; // empty class

struct Derived1 : Base {
    int i;
};

int main() {
    // the size of any object of empty class type is at least 1
    assert(sizeof(Base) == 1);

    // empty base optimization applies
    assert(sizeof(Derived1) == sizeof(int));
}

空基本優化通常由分配器感知標準庫類(std::vectorstd::functionstd::shared_ptr 等)使用,以避免在分配器無狀態時佔用其分配器成員的任何額外儲存。這是通過儲存一個所需的資料成員(例如 beginendcapacity 指標)來實現的。

參考: cppreference