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>::value
juga true
untuk yang pertama, tetapi false
untuk yang kedua. Apa implikasinya itu, saya juga tidak tahu. :)
= default
lebih eksplisit, dan konsisten dengan dukungan untuk itu dengan konstruktor.