ฉันมีชั้นเรียนเช่นนี้:
struct event_counts {
uint64_t counts[MAX_COUNTERS];
event_counts() : counts{} {}
// more stuff
};
โดยปกติฉันต้องการเริ่มต้น (ศูนย์) เริ่มต้นcounts
อาร์เรย์ตามที่แสดง
ที่ตำแหน่งที่เลือกที่ระบุโดยการทำโปรไฟล์อย่างไรก็ตามฉันต้องการระงับการกำหนดค่าเริ่มต้นของอาร์เรย์เนื่องจากฉันรู้ว่าอาร์เรย์กำลังจะถูกเขียนทับ แต่คอมไพเลอร์ไม่ฉลาดพอที่จะเข้าใจได้
อะไรคือวิธีที่ใช้สำนวนและมีประสิทธิภาพในการสร้างตัวสร้าง zero-arg แบบ "รอง" ดังกล่าว
ขณะนี้ฉันใช้คลาสแท็กuninit_tag
ที่ส่งผ่านเป็นอาร์กิวเมนต์ดัมมี่เช่น:
struct uninit_tag{};
struct event_counts {
uint64_t counts[MAX_COUNTERS];
event_counts() : counts{} {}
event_counts(uninit_tag) {}
// more stuff
};
จากนั้นฉันเรียกผู้สร้างที่ไม่เริ่มต้นเช่นevent_counts c(uninit_tag{});
เมื่อฉันต้องการที่จะปราบปรามการก่อสร้าง
ฉันเปิดกว้างสำหรับการแก้ปัญหาที่ไม่เกี่ยวข้องกับการสร้างชั้นเรียนจำลองหรือมีประสิทธิภาพมากกว่าในบางด้านเป็นต้น