Saya awalnya memposting ini sebagai pertanyaan hanya tentang destruktor, tapi sekarang saya menambahkan pertimbangan konstruktor default. Inilah pertanyaan aslinya:
Jika saya ingin memberi kelas saya destruktor yang virtual, tetapi sebaliknya sama dengan apa yang akan dihasilkan oleh kompiler, saya dapat menggunakan
=default:class Widget { public: virtual ~Widget() = default; };Tapi sepertinya saya bisa mendapatkan efek yang sama dengan kurang mengetik menggunakan definisi kosong:
class Widget { public: virtual ~Widget() {} };Apakah ada cara di mana kedua definisi ini berperilaku berbeda?
Berdasarkan balasan yang diposting untuk pertanyaan ini, situasi untuk konstruktor default tampak serupa. Mengingat hampir tidak ada perbedaan makna antara " =default" dan " {}" untuk destruktor, apakah hampir sama tidak ada perbedaan makna antara opsi-opsi ini untuk konstruktor default? Yaitu, dengan anggapan saya ingin membuat jenis di mana objek jenis itu akan dibuat dan dihancurkan, mengapa saya ingin mengatakan
Widget() = default;
dari pada
Widget() {}
?
Saya minta maaf jika memperpanjang pertanyaan ini setelah posting aslinya melanggar beberapa aturan SO. Posting pertanyaan yang hampir identik untuk konstruktor default mengejutkan saya sebagai pilihan yang kurang diinginkan.
std::has_trivial_destructor<Widget>::valuejuga trueuntuk yang pertama, tetapi falseuntuk yang kedua. Apa implikasinya itu, saya juga tidak tahu. :)
= defaultlebih eksplisit, dan konsisten dengan dukungan untuk itu dengan konstruktor.