जावा और सी # वर्गों कि final
और sealed
खोजशब्दों के साथ आधार वर्ग के रूप में इस्तेमाल नहीं किया जा सकता की धारणा समर्थन करते हैं। C++ में लेकिन वहाँ व्युत्पन्न किया जा रहा है जो एक दुविधा के साथ वर्ग के लेखक पत्ते से से एक वर्ग को रोकने के लिए कोई अच्छा तरीका है, हर वर्ग एक आभासी नाशक नहीं है या करना चाहिए?क्या प्रत्येक वर्ग में आभासी विनाशक होना चाहिए?
संपादित करें: सी ++ के बाद से 11 यह अब सच है, आप निर्दिष्ट कर सकते हैं कि एक वर्ग final
है।
एक ओर एक वस्तु एक आभासी नाशक देने पर मतलब है कि यह एक vtable
है और इसलिए (64 बिट मशीनों पर या 8) 4 उपभोग vptr
के लिए प्रति-वस्तु अतिरिक्त बाइट्स होगा।
दूसरी तरफ यदि कोई व्यक्ति बाद में इस वर्ग से निकलता है और बेस क्लास में पॉइंटर के माध्यम से व्युत्पन्न कक्षा को हटा देता है तो प्रोग्राम खराब परिभाषित होगा (आभासी विनाशक की अनुपस्थिति के कारण), और स्पष्ट रूप से अनुकूलन के लिए सूचक प्रति वस्तु हास्यास्पद है।
gripping hand पर एक आभासी विनाशक (तर्कसंगत) विज्ञापन करता है कि इस प्रकार का उपयोग बहुरूप रूप से किया जाना है।
कुछ लोगों को, आप एक स्पष्ट कारण एक आभासी नाशक का उपयोग नहीं करने की जरूरत है (जैसा कि this question का पहलू है) और दूसरों का कहना है कि केवल जब आप विश्वास है कि अपने वर्ग से प्राप्त किया जा रहा है कारण है कि आप उन्हें का उपयोग करना चाहिए लगता है क्या आप सोचते हैं?
पहले से ही प्रश्नों के लिए पूछ रहे प्रश्न हैं - क्या यह एक डुप्लिकेट है, या क्या यह एक राय सर्वेक्षण के रूप में है? यदि उत्तरार्द्ध, शायद आपको मतदान के लिए "हां" और "नहीं" उत्तर बनाना चाहिए, तो सवाल बंद करें? मुझे लगता है कि एसओ पर एक बहु-चुनाव मतदान लागू करने का अनुशंसित तरीका है। –
डुप्लिकेट्स: http://stackoverflow.com/questions/270917/why-should-i-declare-a-virtual-destructor-for-an-abstract-class-in-c, http://stackoverflow.com/questions/300 9 86/कब-चाहिए-आप-उपयोग-वर्चुअल-विनाशक –
"और प्रति वस्तु सूचक के लिए स्पष्ट रूप से अनुकूलन हास्यास्पद है।" - यह छोटी वस्तुओं के लिए हास्यास्पद नहीं है। सी ++ 0 एक्स एक कंटेनर फॉरवर्डलिस्ट जोड़ रहा है, ठीक है क्योंकि कभी-कभी ऑब्जेक्ट ओवरहेड प्रति पॉइंटर बहुत अधिक होता है - अंतरिक्ष और समय आवश्यकताओं से। –