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