2013-02-01 15 views
10

हाँ मुझे पता है * एक सूचक है। यही वह नहीं है जिसके बारे में मैं बात कर रहा हूं। मेरे कार्यक्रमों में से एक में मेरा ब्रेकपॉइंट सेट था और मैंने देखा कि ऑटो में __vfptr वैल्यू 0x000007feed210a00 के साथ एक चर था।__vfptr के लिए `*` मतलब क्या है?

हालांकि, प्रकार के तहत, यह अभी कहा * और यही वह है। मेरे कार्यक्रम के सभी अन्य बिंदुओं में unsigned char* या some::namespace::Frame*, या int* जैसे प्रकार थे। ये समझ में आता है क्योंकि सूचक सीधे किसी विशेष वर्ग या डेटा प्रकार से बंधे होते हैं। लेकिन मुझे नहीं पता कि * हो सकता है, वास्तव में केवल साधारण सूचक प्रकार हैं?

संपादित: मैं दृश्य स्टूडियो का उपयोग कर रहा 2010.

+0

कृपया आप कोड की सटीक रेखा पोस्ट कर सकते हैं? –

+1

आप किस डीबगर का उपयोग करते हैं? – Necto

+1

'__vfptr' वर्चुअल फ़ंक्शन के लिए पॉइंटर इंगित करता प्रतीत होता है। शायद डीबगर सही प्रकार को हल नहीं कर सका। –

उत्तर

11

__vfptrVirtual method table होता है और यह जानकारी है कि विरासत में बाध्यकारी गतिशील अनुमति देता है शामिल हैं।

इसमें जानकारी function pointers जैसी चीजें शामिल होगी virtual functions और कक्षा और उसके माता-पिता की जानकारी को हल करने के लिए।

+2

इसमें इससे बहुत अधिक मोता है। –

5

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

संबंधित मुद्दे