मैंने मूल रूप से इसे केवल विध्वंसक के बारे में एक प्रश्न के रूप में पोस्ट किया था, लेकिन अब मैं डिफ़ॉल्ट कंस्ट्रक्टर पर विचार कर रहा हूं। यहाँ मूल प्रश्न है:
अगर मैं अपनी कक्षा को एक विध्वंसक देना चाहता हूं जो आभासी है, लेकिन अन्यथा कंपाइलर उत्पन्न करने के समान है, मैं इसका उपयोग कर सकता हूं
=default
:class Widget { public: virtual ~Widget() = default; };
लेकिन ऐसा लगता है कि मैं एक खाली परिभाषा का उपयोग करके कम टाइपिंग के साथ समान प्रभाव प्राप्त कर सकता हूं:
class Widget { public: virtual ~Widget() {} };
क्या कोई तरीका है जिसमें ये दोनों परिभाषाएं अलग-अलग व्यवहार करती हैं?
इस प्रश्न के लिए पोस्ट किए गए उत्तरों के आधार पर, डिफ़ॉल्ट निर्माणकर्ता के लिए स्थिति समान लगती है। यह देखते हुए कि विनाशकों के लिए " =default
" और " {}
" के बीच अर्थ में लगभग कोई अंतर नहीं है, क्या डिफ़ॉल्ट निर्माणकर्ताओं के लिए इन विकल्पों के बीच अर्थ में लगभग कोई अंतर नहीं है? यह मानते हुए कि मैं एक प्रकार बनाना चाहता हूं, जहां उस प्रकार की वस्तुएं निर्मित और नष्ट दोनों होंगी, मैं क्यों कहना चाहता हूं
Widget() = default;
के बजाय
Widget() {}
?
मैं माफी माँगता हूँ अगर इस सवाल का विस्तार अपनी मूल पोस्टिंग के बाद कुछ एसओ नियमों का उल्लंघन कर रहा है। डिफ़ॉल्ट निर्माणकर्ताओं के लिए लगभग समान प्रश्न पोस्ट करने से मुझे कम वांछनीय विकल्प के रूप में मारा गया।
std::has_trivial_destructor<Widget>::value
है true
पहले के लिए है, लेकिन false
दूसरे के लिए। उस के निहितार्थ क्या हैं मुझे नहीं पता। :)
= default
अधिक स्पष्ट imo है, और इसके लिए निर्माणकर्ताओं के साथ समर्थन के अनुरूप है।