2012-05-10 12 views
6

है मान लीजिए मैं VectorA और VectorB दो std::vector<SameType>, दोनों initilized (i VectorA.size() > 0 मतलब है और VectorB.size() > 0)मेमोरी de-आवंटन :: वेक्टर फिर से काम

हैं मुझे क्या करना:

VectorA = VectorB; 

VectorA के लिए आवंटित स्मृति पूर्ववत स्वचालित रूप से मुक्त हो जाती है?

+2

हां इसे मुक्त किया गया है। – tuxuday

उत्तर

5

यह इस अर्थ में मुक्त है कि सभी निहित वस्तुओं के विनाशकों को बुलाया जाता है, और वेक्टर अब स्मृति का मालिक नहीं है।

लेकिन वास्तव में, यह सिर्फ allocator पर वापस आ गया है, जो वास्तव में इसे ओएस पर वापस कर सकता है या नहीं।

जब तक आवंटक में उपयोग में कोई बग नहीं है, तब तक आपने स्मृति की रिसाव नहीं बनाई है, अगर आपकी चिंता यही है।


1. @ दाऊद नीचे टिप्पणी में बताते हैं के रूप में, स्मृति जरूरी पुनः आवंटित की जाती नहीं है पर आकार या परिवर्तन नहीं करने की जरूरत है कि क्या निर्भर करता है।

+1

गंतव्य वेक्टर की पर्याप्त क्षमता होने पर असाइनमेंट को पुराने बफर को पुन: आवंटित करने, प्रतिलिपि बनाने और हटाने की आवश्यकता नहीं है। इसे पुरानी वस्तुओं को या तो नष्ट करने की आवश्यकता नहीं है, बल्कि * असाइनमेंट ऑपरेटर * को * फिर से लिखना * पहले 'मिनट (v1.size(), v2.size()) तत्वों का उपयोग कर सकते हैं (माना जाता है कि इसकी आवश्यकता नहीं है पुन: आवंटित करने के लिए। –

2

सामान्य रूप से, आवश्यक नहीं। जब आप दूसरे को एक वेक्टर असाइन करते हैं, तो पोस्ट की स्थिति यह है कि ऑपरेशन के अंत में दोनों सरणी में समतुल्य ऑब्जेक्ट्स होंगे।

यदि गंतव्य वेक्टर के capacity पर्याप्त है, आपरेशन min(v1.size(), v2.size()) तत्वों के सेट पर असाइनमेंट ऑपरेटर बुला, और फिर या तो तत्वों के बाकी destructing यदि गंतव्य वेक्टर अधिक तत्वों आयोजित करके प्राप्त किया जा सकता है, या अन्य अंत में अतिरिक्त तत्व प्रति-निर्माण। इस मामले में कोई स्मृति रिलीज या आवंटन नहीं किया जाएगा।

यदि गंतव्य वेक्टर में पर्याप्त क्षमता नहीं है, तो यह पर्याप्त क्षमता वाले प्रति-निर्माण स्रोत वेक्टर से नए बफर में तत्वों के साथ एक नया बफर बनाएगा। फिर यह पुराने और नए बफर को स्वैप कर देगा, सभी पुरानी वस्तुओं को नष्ट कर देगा और पुराना बफर जारी करेगा। इस मामले में, पुरानी वस्तुओं नष्ट हो गईं और पुरानी स्मृति जारी की गई, लेकिन यह केवल एक मामला है।

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