J'ai une classe comme ça:
struct event_counts {
uint64_t counts[MAX_COUNTERS];
event_counts() : counts{} {}
// more stuff
};
Habituellement, je veux initialiser par défaut (zéro) le counts
tableau comme indiqué.
À des emplacements sélectionnés identifiés par le profilage, cependant, je voudrais supprimer l'initialisation du tableau, car je sais que le tableau est sur le point d'être écrasé, mais le compilateur n'est pas assez intelligent pour le comprendre.
Quelle est une manière idiomatique et efficace de créer un constructeur zéro-arg «secondaire»?
Actuellement, j'utilise une classe de balises uninit_tag
qui est passée comme argument factice, comme ceci:
struct uninit_tag{};
struct event_counts {
uint64_t counts[MAX_COUNTERS];
event_counts() : counts{} {}
event_counts(uninit_tag) {}
// more stuff
};
Ensuite, j'appelle le constructeur no-init comme event_counts c(uninit_tag{});
quand je veux supprimer la construction.
Je suis ouvert aux solutions qui n'impliquent pas la création d'une classe factice, ou qui sont plus efficaces d'une manière ou d'une autre, etc.