Saturday 15 August 2015

delphi - Why freeing not empty TList<Int64> does not cause memory leak? -


खाली नहीं खाली TList & lt; integer & gt; स्मृति रिसाव का कारण नहीं है क्योंकि पूर्णांक में पॉइंटर के बराबर है आकार, और TList संकेतक पूरी तरह से हैंडल करते हैं। (यह जहाँ तक मुझे समझ में आता है।) खाली नहीं खाली TList & lt; स्ट्रिंग & gt; भी स्मृति रिसाव का कारण नहीं है, क्योंकि स्ट्रिंग स्वतः ही एक संकेतक है और इसे डेल्फी के आंतरिकों में कहीं ध्यान नहीं दिया जाता है जब यह अब नहीं है

हालांकि, किसी भी खाली TList & lt; SomeClass & gt; को मुक्त करने से हमेशा मेमोरी रिसाव उत्पन्न होता है, और यह क्यों समझा जाता है।

मुझे जो बात समझ में नहीं आ रही है रिक्त नहीं TList & lt; Int64 & gt; मुक्त रिसाव नहीं करता है।

TList & lt; T & gt; केवल T की गतिशील सरणी के आस-पास एक आवरण है। T का डायनामिक सरणी एक प्रबंधित प्रकार है और इस प्रकार स्पष्ट विनाश की आवश्यकता नहीं है

यह सरणी के तत्वों को छोड़ देता है चूंकि Int64 एक वैल्यू प्रकार है, इसे स्पष्ट विनाश की आवश्यकता नहीं है।

एक सामान्य नियम के रूप में, आपको केवल उसी चीज़ को नष्ट करना जरूरी है जिसे आपने बनाया था। आपने सूची बनाई है, आपको इसे नष्ट करना होगा आप तत्वों को स्वयं नहीं बनाते, इसलिए आपको उन्हें नष्ट करने की आवश्यकता नहीं है।


No comments:

Post a Comment