ExpertiDict

C++ · Avançado · Inglês · Técnico

empty base optimization

ˈɛmp.ti beɪs ˌɑːp.tɪ.maɪˈzeɪ.ʃənsubstantivo

Otimização que faz a base vazia não ocupar espaço no objeto derivado, ao contrário de um membro vazio, que ocupa ao menos um byte. Permite policies sem custo de memória.

Onde usar

Usada por bibliotecas como std::unique_ptr com deletor sem estado, para que o ponteiro não fique maior que um ponteiro cru. Desde o C++20, [[no_unique_address]] dá o mesmo efeito para membros.

Em código

struct Vazio {};
struct Membro { Vazio v; int x; };
struct Base : Vazio { int x; };
struct Attr {
  [[no_unique_address]] Vazio v;
  int x;
};
// sizeof: 8, 4, 4 (típico)

Exemplos

The empty base optimization keeps the pointer eight bytes.

A empty base optimization mantém o ponteiro com oito bytes.

Use no_unique_address so the empty member takes no space.

Use no_unique_address para o membro vazio não ocupar espaço.

Cuidado

Não vale quando a base vazia é do mesmo tipo de outro subobjeto, pois dois objetos distintos do mesmo tipo não podem ter o mesmo endereço.

Sinônimos

EBO

Veja também

Todos os termos de C++