सी ++ 11 में, हम एक नाशक घोषित करने के लिए स्वचालित रूप से जेनरेट होने के लिए सक्षम हैं:डिफ़ॉल्ट शुद्ध आभासी नाशक
struct X {
virtual ~X() = default;
};
इसके अलावा, हम एक नाशक घोषित आभासी शुद्ध होने के लिए कर सकते हैं:
struct X {
virtual ~X() = 0;
};
मेरा सवाल है: विनाशक को दोनों घोषित करने के लिए कैसे ऑटो उत्पन्न और शुद्ध वर्चुअल? निम्न सिंटैक्स तरह लग रहा है सही नहीं है:
struct X {
virtual ~X() = 0, default;
};
न ही यह एक:
struct X {
virtual ~X() = 0 default;
};
संपादित करें: कुछ सवाल करने के उद्देश्य पर स्पष्टीकरण
struct X {
virtual ~X() = 0 = default;
};
न तो इस में से एक है । असल में मैं खाली कक्षा को गैर-तत्काल आधार वर्ग होना चाहता हूं, लेकिन व्युत्पन्न वर्ग तत्काल है, तो कक्षा में शुद्ध वर्चुअल विनाशक होना चाहिए। लेकिन दूसरी तरफ, मैं एक .cpp फ़ाइल में परिभाषा प्रदान नहीं करना चाहता हूं। तो मुझे default
के बराबर कुछ प्रकार की तंत्र की आवश्यकता है। मुझे आश्चर्य है कि किसी को समस्या का समाधान करने का कोई विचार है।
आप कर सकते हैं 'आभासी ~ एक्स() = 0 {}'? अब फिर से सोचें कि आप क्या करने की कोशिश कर रहे हैं। – Xeo
@Xeo: हाँ आप कर सकते हैं। लेकिन उस वाक्यविन्यास के साथ नहीं; आपको एक गैर-इनलाइन कार्यान्वयन प्रदान करना होगा। किसी भी शुद्ध वर्चुअल फ़ंक्शन में डिफ़ॉल्ट कार्यान्वयन हो सकता है - इसका अर्थ यह है कि गैर-सारणित व्युत्पन्न कक्षाएं * फ़ंक्शन को कार्यान्वित करनी चाहिए, लेकिन उनके कार्यान्वयन के हिस्से के रूप में माता-पिता के डिफ़ॉल्ट कार्यान्वयन को कॉल कर सकती है। – JohannesD
@ जोहान्सडी: मुझे पता है कि, माइकल के उत्तर पर मेरी टिप्पणी देखें, लेकिन '= डिफ़ॉल्ट' मूल रूप से '{}' कक्षा में है (यदि आपके पास कोई सदस्य नहीं है)। – Xeo