ฉันโพสต์สิ่งนี้เป็นคำถามเกี่ยวกับ destructors เท่านั้น แต่ตอนนี้ฉันเพิ่มการพิจารณาตัวสร้างเริ่มต้น นี่คือคำถามเดิม:
ถ้าฉันต้องการให้ destructor ในชั้นเรียนของฉันเป็นเสมือน แต่อย่างอื่นเหมือนกับสิ่งที่คอมไพเลอร์จะสร้างฉันสามารถใช้
=default
:class Widget { public: virtual ~Widget() = default; };
แต่ดูเหมือนว่าฉันจะได้รับผลกระทบเดียวกันโดยพิมพ์น้อยลงโดยใช้คำจำกัดความที่ว่างเปล่า:
class Widget { public: virtual ~Widget() {} };
มีวิธีใดบ้างที่คำจำกัดความทั้งสองนี้ทำงานต่างกัน?
จากการตอบกลับที่โพสต์สำหรับคำถามนี้สถานการณ์ของ Constructor เริ่มต้นจะคล้ายกัน ระบุว่าไม่มีความแตกต่างในความหมายระหว่าง " =default
" และ " {}
" สำหรับ destructors มีความคล้ายคลึงกันเกือบไม่แตกต่างกันในความหมายระหว่างตัวเลือกเหล่านี้สำหรับตัวสร้างเริ่มต้นหรือไม่ นั่นคือสมมติว่าฉันต้องการสร้างประเภทที่วัตถุประเภทนั้นจะถูกสร้างขึ้นและถูกทำลายทำไมฉันอยากจะพูด
Widget() = default;
แทน
Widget() {}
?
ฉันขออภัยหากการขยายคำถามนี้หลังจากการโพสต์ต้นฉบับละเมิดกฎ SO ดังนั้น การโพสต์คำถามที่เกือบเหมือนกันสำหรับตัวสร้างเริ่มต้นทำให้ฉันเป็นตัวเลือกที่ต้องการน้อยกว่า
std::has_trivial_destructor<Widget>::value
เป็นtrue
ครั้งแรก แต่false
เป็นครั้งที่สอง ความหมายของสิ่งนั้นคืออะไรฉันไม่รู้เช่นกัน :)
= default
เป็น imo ที่ชัดเจนกว่าและสอดคล้องกับการสนับสนุนสำหรับ constructor