c++ - error with placement new for array in MSVC 2012? -
जब मैं निम्नलिखित कर रहा हूं:
T * ptr2 = new (ptr1) टी ();
6];
मैं डीबग, पीटीआर 2> पीटीआर 1 (3 बाइट्स द्वारा बंद) में एमएसवीसी 2012 के तहत प्राप्त करता हूं
हालांकि "नया" फाइल में कोड है:
इनलाइन शून्य * __ सीआरटीडीसीएल ऑपरेटर नया [] (आकार_टी, शून्य * _Where) _THROW0 () {// नियुक्ति के साथ सरणी के साथ _Where वापसी (_Where); }
मैं मान रहा हूँ कि कुछ डीबग जानकारी जोड़ दी जाती है लेकिन मैं इसका अर्थ नहीं समझ सकता
प्रारंभिक ptr1 malloc के माध्यम से प्राप्त किया जाता है, इसलिए मुझे लगता है कि यह किसी भी संभव प्रकार से गठबंधन होना चाहिए, इसलिए मुझे नहीं लगता कि संरेखण एक मुद्दा है।
क्या मैं कुछ कर रहा हूं जो यहाँ काम नहीं कर रहा है? क्यों ptr2! = Ptr1 होगा? धन्यवाद!
मुझे नहीं लगता कि सी ++ प्लेसमेंट नई वस्तु की शुरुआत करने के लिए कड़ाई से आवश्यक है क्लाइंट कोड बफर की शुरुआत में देख सकता है जिसे आप नए पास कर चुके हैं।
इसे केवल इसके अंदर कहीं जगह रखने की आवश्यकता है। यह पूरी तरह से कम्पाइलर के लिए अंतरिक्ष के साथ कुछ करना है करने के लिए अच्छा है, बशर्ते इसके पास कहीं भी कोई बफ़र्स आवंटित नहीं होता है।
इसलिए आपको समान मूल्य वाले ptr1 और ptr2 पर निर्भर नहीं होना चाहिए, नियुक्ति के किसी भी उपयोग के लिए, न सिर्फ यह एक।
मुझे इस बात के बारे में निश्चित नहीं मर रहा है मैं गलत हो सकता है।
Comments
Post a Comment