2012-12-30 49 views
12

संभव डुप्लिकेट:
Is it okay to inherit implementation from STL containers, rather than delegate?एसटीएल कंटेनर हैं जो विरासत की अनुमति देने के लिए डिज़ाइन किए गए हैं?

मेरा प्रश्न Why don't STL containers have virtual destructors? से संबंधित है (पूर्व प्रश्न के लेखक सहित) कुछ लोगों को आश्वस्त हैं कि आभासी dtor नहीं होने उस वर्ग का तात्पर्य दाय नहीं है। मुझे इस तरह के एक मजबूत कथन के बारे में संदेह है, इसलिए मैंने स्रोत या कुछ तर्क मांगे लेकिन अधिकांश उत्तरदाता चुप रह गए। इसके अलावा किसी ने भी मेरे answer

का जवाब दिया तो मुझे लगता है कि पूर्व प्रश्न में किए गए अनुमानों पर सवाल उठाना और इस महत्वपूर्ण मुद्दे को स्पष्ट करना अच्छा विचार है। क्या एसटीएल कंटेनर विरासत की अनुमति देने के लिए डिज़ाइन किए गए हैं या नहीं? और अधिक आम तौर पर: आभासी विनाशक विरासत के लिए आवश्यक है?

+0

क्या यह प्रश्न http://stackoverflow.com/questions/2034916/is-it-okay-to-inherit-implementation-from-stl-containers-rather-than-delegate से अलग है? – jogojapan

+0

यह भी एक है http://stackoverflow.com/questions/6806173/why-should-not-i-subclass-inherit- मानक- कंटेनर – jogojapan

उत्तर

17

एसटीएल कंटेनर विरासत की अनुमति देने के लिए डिज़ाइन किए गए हैं या नहीं?

मानक पुस्तकालय कंटेनर विरासत की अनुमति देते हैं। मानक लाइब्रेरी कंटेनर क्लास से विरासत में आने से आपको कुछ भी नहीं रोकता है। यदि आप ऐसा करते हैं तो आपको कोई संकलन त्रुटियां नहीं मिलेंगी।
लेकिन वे जो क्लास क्लास पॉइंटर के माध्यम से आपके व्युत्पन्न क्लास ऑब्जेक्ट का विनाश करने की अनुमति देने के लिए डिज़ाइन नहीं किए गए हैं। तो यदि आप ऐसे परिदृश्य के लिए विरासत का उपयोग करना चाहते हैं (डायनामिक पॉलिमॉर्फिज्म के लिए संक्षेप में) तो मानक लाइब्रेरी कंटेनर स्पष्ट रूप से इसके लिए डिज़ाइन नहीं किए गए हैं।

आभासी विनाशक विरासत के लिए आवश्यक है?

बेस वर्ग नाशक केवल यदि आप आधार वर्ग सूचक पर delete कॉल करने के लिए एक व्युत्पन्न वर्ग वस्तु की ओर इशारा किया इरादा आभासी होना आवश्यक है। बेस क्लास विनाशक वर्चुअल नहीं होने पर इसका अपरिभाषित व्यवहार होगा।

तो संक्षेप में प्रस्तुत करने, नियम है:

आप गतिशील बहुरूपता मानक पुस्तकालय कंटेनर क्लासों इसके लिए नहीं बनाया गया है के लिए विरासत की जरूरत है, लेकिन आप है कि आप सुरक्षित रूप से से विरासत कर सकते हैं की जरूरत नहीं है, तो उन्हें।

नोट: जवाब लिंक आपके द्वारा दी गई में आपका विश्लेषण सही है। यह संभवतः प्रतिक्रियाएं नहीं मिली क्योंकि मूल प्रश्न पोस्ट किए जाने के बाद उत्तर लंबे समय तक पोस्ट किया गया था (कुछ साल)। आपके पास अब मेरा +1 है।

+2

+1। बड़े भाई। ;-) – Nawaz

+0

@ नवाज: धन्यवाद :) –