मैं std :: वेक्टर कोड देख रहा था और मुझे कुछ मिला जो मुझे काफी नहीं मिला। जब क्षमता < आकार() + 1 को इसे बफर को पुन: आवंटित करने की आवश्यकता होती है ताकि यह नया तत्व सम्मिलित कर सके। यह क्या करता है (जहाँ तक मैं कोड से निकालने में सक्षम किया गया है) है:std :: वेक्टर डालने() reallocation
- नई बफर आवंटित
- वर्ष बफर के उपसर्ग कॉपी (0 - प्रविष्टि के सूचकांक)
- नई बफर में नए तत्व का निर्माण
- वर्ष बफर के प्रत्यय कॉपी (सूचकांक - अंत) वर्ष बफर में सभी वस्तुओं पर
- कॉल नाशक
- पुनःआवंटन वर्ष बफर
उपसर्ग और प्रत्यय प्रतिलिपि जहां तक मैं देख सकता था memmove के साथ किया जाता है। डेटा की शुद्ध बाइनरी प्रति याद नहीं है? यह तत्वों के निर्माता को कॉल नहीं करता है, है ना? मैं क्या सोच रहा था, यह कार्य पुराने बफर में तत्वों पर विनाशक को क्यों बुलाता है यदि स्मृति अभी स्थानांतरित हो जाती है, तो नए बफर में फिर से निर्मित नहीं किया जाता है?
मुझे लगता है कि कोड की आपकी समझ गलत है। अगर आपको लगता है कि memmove का उपयोग किया जा रहा है, तो कृपया एक टुकड़ा पोस्ट करें जो इसे दिखाता है। –
memmove का उपयोग कंपाइलर का एक संभावित अनुकूलन है। लेकिन यह हमारे पास केवल पीओडी प्रकारों के लिए मान्य है। यदि इस प्रकार के एक निर्माता/विनाशक हैं तो उन्हें उपयोग करने की आवश्यकता है। –