निष्पादन समय
क्या के
? फ़ंक्शंस को स्थिर रूप से हल किया जाता है, इसलिए फ़ंक्शन कॉल समान होती हैं। MyClass1
का निर्माता बेस क्लास के रचनाकारों को कॉल करेगा, और इसके विनाशक आधार वर्गों के विनाशकों को बुलाएंगे, इसलिए निर्माण के लिए & विनाश कुछ ओवरहेड हो सकता है। शायद। कुछ कंपाइलर कॉल को ऑप्टिमाइज़ कर सकते हैं।
स्मृति
यह वही हो जाएगा, दोनों ही एक सदस्य double
है। सैद्धांतिक रूप से। मुझे लगता है कि कार्यान्वयन पर निर्भर करता है, क्योंकि यह मानक द्वारा अनिवार्य नहीं है, लेकिन आमतौर पर कोई स्मृति ओवरहेड नहीं होगा।
नोट कि, के लिए Derived
परिणाम अपरिभाषित व्यवहार में एक सूचक के माध्यम से एक वस्तु MyClass1
को हटाने है, क्योंकि वहाँ कोई virtual
नाशक।
नोट 2 पॉलिमॉर्फिज्म के बिना विरासत एक कोड गंध है। यह नहीं कह रहा कि यह गलत है, लेकिन ज्यादातर मामलों में संरचना बेहतर है।
स्रोत
2012-08-14 17:32:46
सिद्धांत में कोई प्रदर्शन अंतर नहीं होना चाहिए। अभ्यास में ... अच्छी तरह से, अपने विशेष परिदृश्यों को मापें और पता लगाएं (मुझे उच्च अनुकूलन स्तर पर कोई अंतर नहीं मिलेगा, लेकिन शायद संकलक बेस क्लास कन्स्ट्रक्टर कॉल इनलाइन करने में असफल हो सकता है, या यह ईबीओ करने में असफल हो सकता है, या ... चीजों के सभी प्रकार _could_ होता है, यह भी तेज़ हो सकता है। पता लगाने का तरीका मापना है)। –
संभावित डुप्लिकेट [विरासत की लागत क्या है?] (Http://stackoverflow.com/questions/7210412/what-is-the-cost-of-inheritance) –
+1: अच्छी तस्वीर। –