मान लीजिए मैं एक वर्गव्युत्पन्न वर्ग कन्स्ट्रक्टर पर कोई भी वादा नहीं: क्या इसका उपयोग बेस कन्स्ट्रक्टर पर ध्यान देने के बिना किया जा सकता है?
class C : public B {
public:
C() noexcept;
}
noexcept
विनिर्देशक आधार वर्ग द्वारा एक ही वादा आवश्यकता होती है है? यही है, जब मैं अस्वीकरण का उपयोग करने पर विचार कर रहा हूं, तो क्या मैं सिर्फ सी :: सी() के व्यवहार को देखता हूं या क्या मुझे यह भी विचार करने की आवश्यकता है कि बी :: बी() अपवाद फेंक सकता है या नहीं?
उदाहरण के लिए, यदि बी :: बी अपवाद फेंकता है, तो क्या यह सी :: सी या उस कोड पर प्रचारित करता है जो एक नए वर्ग के उदाहरण के लिए पूछ रहा था? - यदि सी :: सी को प्रचारित किया जाता है, तो यह एक कारण होगा कि कन्स्ट्रक्टर के लिए कोई संदर्भ नहीं है यदि बेस क्लास कन्स्ट्रक्टर के लिए अस्वीकार्य नहीं है।
बेसक्लस निर्माण विफल होने पर कक्षा निर्माण सफल हो सकता है? –
नहीं। इसलिए, जब संकलक यह सब एक साथ रखता है, तो क्या यह प्रत्येक कन्स्ट्रक्टर को स्वतंत्र रूप से संभालता है, जिसका अर्थ यह है कि व्युत्पन्न वर्ग पर एक अस्वीकरण विनिर्देश का कोई प्रभाव नहीं पड़ता है कि संकलक बेस कन्स्ट्रक्टर का प्रबंधन कैसे करता है? – rsjaffe
वास्तव में, मुझे लगता है कि मेरा प्रश्न भ्रामक हो सकता है। यदि आपका बेसक्लास 'वेक्टर' है और आप इसे शून्य आकार पास करते हैं, तो आप वास्तव में गारंटी दे सकते हैं कि कोई अपवाद फेंकता नहीं है। इसी तरह, 'अस्वीकरण' का अर्थ है कि कुछ फेंकना नहीं चाहिए, न कि 'abort() '(मुझे लगता है, कृपया दस्तावेज़ों का संदर्भ लें) का आह्वान किया जाता है। इसलिए, यदि बेस कन्स्ट्रक्टर पहले से ही 'अस्वीकरण' नहीं है, तो इसे 'try' - 'catch' में लपेटा जाना चाहिए, लेकिन यह' अस्वीकरण 'गारंटी को पूरा कर सकता है। –