Başlangıçta bunu sadece yıkıcılar hakkında bir soru olarak gönderdim, ancak şimdi varsayılan yapıcıyı da ekliyorum. İşte asıl soru:
Sınıfıma sanal, ancak derleyicinin üreteceği şeyle aynı olan bir yıkıcı vermek istersem, kullanabilirim
=default
:class Widget { public: virtual ~Widget() = default; };
Ama boş bir tanım kullanarak daha az yazarak aynı etkiyi elde edebilirim:
class Widget { public: virtual ~Widget() {} };
Bu iki tanımın farklı davrandığı bir yol var mı?
Bu soru için gönderilen cevaplara dayanarak, varsayılan kurucu için durum benzer görünüyor. Yıkıcılar için " =default
" ve " {}
" arasında anlam bakımından neredeyse hiçbir fark olmadığı göz önüne alındığında, varsayılan kurucular için bu seçenekler arasında hemen hemen hiçbir anlam farkı yoktur? Yani, bu tür nesnelerin hem yaratılacağı hem de yok edileceği bir tür oluşturmak istediğimi varsayarsak, neden şunu söylemek isterim?
Widget() = default;
onun yerine
Widget() {}
?
Orijinal gönderisinin bazı SO kurallarını ihlal etmesinden sonra bu soruyu genişlettiğinizde özür dilerim. Varsayılan kurucular için neredeyse özdeş bir soru yayınlamak, daha az arzu edilen seçenek olarak beni etkiledi.
std::has_trivial_destructor<Widget>::value
bir true
ilk için değil, false
saniye. Bunun ne anlama geldiğini de bilmiyorum. :)
= default
daha açık imo ve yapıcılar ile destek ile tutarlı değil.