Eu tenho uma classe como esta:
struct event_counts {
uint64_t counts[MAX_COUNTERS];
event_counts() : counts{} {}
// more stuff
};
Normalmente, eu quero padrão (zero) inicializar a counts
matriz como mostrado.
Em locais selecionados identificados por criação de perfil, no entanto, eu gostaria de suprimir a inicialização do array, porque sei que o array está prestes a ser substituído, mas o compilador não é inteligente o suficiente para descobrir isso.
O que é uma maneira idiomática e eficiente de criar um construtor zero-arg "secundário"?
Atualmente, estou usando uma classe de tag uninit_tag
que é passada como argumento fictício, assim:
struct uninit_tag{};
struct event_counts {
uint64_t counts[MAX_COUNTERS];
event_counts() : counts{} {}
event_counts(uninit_tag) {}
// more stuff
};
Então chamo o construtor no-init como event_counts c(uninit_tag{});
quando quero suprimir a construção.
Estou aberto a soluções que não envolvam a criação de uma classe fictícia ou que são mais eficientes de alguma forma etc.