Tengo una clase como esta:
struct event_counts {
uint64_t counts[MAX_COUNTERS];
event_counts() : counts{} {}
// more stuff
};
Por lo general, quiero predeterminar (cero) inicializar la counts
matriz como se muestra.
Sin embargo, en las ubicaciones seleccionadas identificadas por la creación de perfiles, me gustaría suprimir la inicialización de la matriz, porque sé que la matriz está a punto de sobrescribirse, pero el compilador no es lo suficientemente inteligente como para descubrirlo.
¿Cuál es una forma idiomática y eficiente de crear un constructor de "cero argumentos" secundario?
Actualmente, estoy usando una clase de etiqueta uninit_tag
que se pasa como un argumento ficticio, así:
struct uninit_tag{};
struct event_counts {
uint64_t counts[MAX_COUNTERS];
event_counts() : counts{} {}
event_counts(uninit_tag) {}
// more stuff
};
Luego llamo al constructor no-init como event_counts c(uninit_tag{});
cuando quiero suprimir la construcción.
Estoy abierto a soluciones que no implican la creación de una clase ficticia, o que son más eficientes de alguna manera, etc.