- हाँ, वे वही हैं। व्युत्पन्न वर्ग कुछ वर्चुअल घोषित नहीं करता है, यह वर्चुअल होने से नहीं रोकता है। वास्तव में, किसी भी विधि (विनाशक शामिल) को व्युत्पन्न वर्ग में वर्चुअल होने से रोकने का कोई तरीका नहीं है, यदि यह बेस क्लास में वर्चुअल था। इन = = सी ++ 11 आप व्युत्पन्न कक्षाओं में ओवरराइड होने से रोकने के लिए
final
का उपयोग कर सकते हैं, लेकिन यह इसे वर्चुअल होने से नहीं रोकता है।
- हां, व्युत्पन्न वर्ग में एक विनाशक को छोड़ा जा सकता है यदि उसके पास कुछ भी नहीं है। और इससे कोई फर्क नहीं पड़ता कि यह वर्चुअल है या नहीं।
- यदि संभव हो तो मैं इसे छोड़ दूंगा। और स्पष्टता के कारणों के लिए व्युत्पन्न कक्षाओं में आभासी कार्यों के लिए मैं हमेशा
virtual
कीवर्ड का उपयोग करता हूं। लोगों को यह पता लगाने के लिए विरासत पदानुक्रम को सभी तरह से नहीं जाना चाहिए कि एक कार्य आभासी है। इसके अतिरिक्त, यदि आपकी कक्षा आपकी प्रतिलिपि घोषित करने या रचनाकारों को स्थानांतरित करने के बिना प्रतिलिपि बनाने योग्य या चलती है, तो किसी भी प्रकार का विनाशक घोषित करता है (भले ही आप इसे default
के रूप में परिभाषित करते हैं) आपको प्रतिलिपि घोषित करने और कन्स्ट्रक्टर और असाइनमेंट ऑपरेटर को स्थानांतरित करने के लिए मजबूर करेगा उन्हें चाहते हैं क्योंकि कंपाइलर अब उन्हें आपके लिए नहीं रखेगा।
आइटम 3 के लिए एक छोटे बिंदु के रूप में। यह टिप्पणियों में बताया गया है कि यदि एक विनाशक अव्यवस्थित है तो संकलक एक डिफ़ॉल्ट (जो अभी भी आभासी है) उत्पन्न करता है। और वह डिफ़ॉल्ट एक इनलाइन फ़ंक्शन है।
इनलाइन फ़ंक्शंस संभावित रूप से आपके प्रोग्राम के अन्य हिस्सों में बदलाव के लिए आपके प्रोग्राम का अधिक खुलासा करते हैं और साझा पुस्तकालयों के लिए बाइनरी संगतता बनाते हैं। इसके अलावा, बढ़ते युग्मन के परिणामस्वरूप कुछ प्रकार के परिवर्तनों के मुकाबले बहुत सारे पुनर्मूल्यांकन हो सकते हैं। उदाहरण के लिए, यदि आप तय करते हैं कि आप वास्तव में अपने आभासी विनाशक के लिए कार्यान्वयन चाहते हैं तो कोड के प्रत्येक टुकड़े को इसे फिर से सम्मिलित करने की आवश्यकता होगी। जबकि अगर आपने इसे कक्षा के शरीर में घोषित कर दिया था और फिर इसे .cpp
फ़ाइल में खाली कर दिया था तो आप बिना किसी संकलन के इसे ठीक से बदल देंगे।
मेरी निजी पसंद तब भी इसे छोड़ना होगा जब संभव हो। मेरी राय में यह कोड को अव्यवस्थित करता है, और संकलक कभी-कभी एक खाली कार्यान्वयन के साथ थोड़ा अधिक कुशल चीजें कर सकता है। लेकिन ऐसी बाधाएं हैं जिनके तहत आप खराब हो सकते हैं।
आपकी आखिरी वाक्य शायद "चाहिए" के बजाय "नहीं" पढ़नी चाहिए। –
@ क्रिस लुट्ज़, मैं आपसे आगे हूं। इसे अब सबमिशन में संपादित किया गया है। :-) – Omnifarious
मैं 'ओमिट' भाग से असहमत हूं। इसे हेडर में घोषित करने और स्रोत में इसे खाली (खाली निकाय) परिभाषित करने के लिए बहुत अधिक लागत नहीं है। यदि आप ऐसा करते हैं, तो आप हमेशा वापस आ सकते हैं और अपने ग्राहकों को पुन: संकलित करने के लिए मजबूर किए बिना कुछ कदम (लॉगिंग?) जोड़ सकते हैं। –