सेट vtable सूचक के अनुसार
यह हिस्सा लगभग पूरी तरह कार्यान्वयन-परिभाषित है। आपका कंपाइलर vtables का उपयोग नहीं कर सकता है। कई vtable पॉइंटर्स हो सकते हैं, या उन चीज़ों के लिए एक या अधिक पॉइंटर्स हो सकते हैं जो vtables नहीं हैं। आभासी आधार वर्ग के रूप में, एकाधिक विरासत हमेशा मनोरंजक है। यह मेटाडेटा memcpy
के साथ किसी अन्य ऑब्जेक्ट पर कॉपी करने योग्य होने की गारंटी नहीं है, इसलिए पॉइंटर को पूर्ण नहीं होना चाहिए। वहाँ ऑफसेट हो सकता है जो ऑब्जेक्ट पॉइंटर के सापेक्ष हैं।
आईआईआरसी आमतौर पर ऐसा होता है कि बेस क्लास कन्स्ट्रक्टर कहा जाता है, तो vtable पॉइंटर बेस क्लास पर सेट होता है, फिर पहले व्युत्पन्न क्लास कन्स्ट्रक्टर को इत्यादि कहा जाता है। यह विनिर्देशों में आवश्यकताओं को पूरा करने के लिए है जब एक कन्स्ट्रक्टर में वर्चुअल फ़ंक्शन कहा जाता है तो क्या होता है। जहां तक मुझे याद है, मानक में केवल "क्रियाओं की सूची" नहीं है, केवल परिभाषित प्रारंभिक क्रम है।
इसलिए यह कार्यान्वित करना संभव नहीं है कि कार्यान्वयन क्या करता है, खासकर जब आपके पास सी ++ मानक का कार्यान्वयन नहीं है। यदि यह "नया" छोड़कर कोनों में कटौती करता है, संभवतः अच्छे कारण के साथ क्योंकि ऐसा लगता है कि आपको लक्ष्य प्लेटफॉर्म पर इसका उपयोग नहीं करना चाहिए, तो कौन जानता है कि यह किस भाषा के अनदेखा करता है। यदि मॉलोक और पॉइंटर-पुशिंग के साथ "नया" नकल करना संभव था, तो कंपाइलर पृथ्वी पर क्यों न केवल नए लागू करता है? मुझे लगता है कि आपको अपने विशिष्ट कंपाइलर और प्लेटफ़ॉर्म के साथ टैग किए गए प्रश्न पूछने की आवश्यकता है, ताकि आपके कंपाइलर पर कोई भी विशेषज्ञ प्रतिक्रिया दे सके।
स्रोत
2009-06-23 09:56:23
+1 वर्चुअल बेस क्लास निर्माण को समझने के लिए –