Saya memiliki kelas seperti ini:
struct event_counts {
uint64_t counts[MAX_COUNTERS];
event_counts() : counts{} {}
// more stuff
};
Biasanya saya ingin default (nol) menginisialisasi counts
array seperti yang ditunjukkan.
Di lokasi tertentu yang diidentifikasi oleh profil, bagaimanapun, saya ingin menekan inisialisasi array, karena saya tahu array akan ditimpa, tetapi kompiler tidak cukup pintar untuk mengetahuinya.
Apa cara idiomatis dan efisien untuk membuat konstruktor zero-arg "sekunder" seperti itu?
Saat ini, saya menggunakan kelas tag uninit_tag
yang dilewatkan sebagai argumen dummy, seperti:
struct uninit_tag{};
struct event_counts {
uint64_t counts[MAX_COUNTERS];
event_counts() : counts{} {}
event_counts(uninit_tag) {}
// more stuff
};
Lalu saya memanggil konstruktor no-init seperti event_counts c(uninit_tag{});
ketika saya ingin menekan konstruksi.
Saya terbuka untuk solusi yang tidak melibatkan pembuatan kelas dummy, atau lebih efisien dalam beberapa cara, dll.