सरणी लंबाई को शून्य पर सेट करना सरणी को नष्ट कर देगा, जो "सरणी को लोड रखने" की आपकी इच्छा के मुकाबले चला जाता है। हालांकि, यह सभी रिकॉर्ड्स और उनके तारों के लिए स्मृति को मुक्त करेगा (किसी भी तार के लिए जिसका संदर्भ गणना उस समय 1 है)।
यदि आप केवल स्ट्रिंग के लिए मेमोरी मुक्त करना चाहते हैं, लेकिन रिकॉर्ड मेमोरी आवंटित रखें (क्योंकि आप तुरंत बाद में रिकॉर्ड के दूसरे सेट को आवंटित करने की योजना बना रहे हैं, और आप रिलीज़ करने और फिर से आवंटित करने की बर्बादी नहीं चाहते हैं एक ही स्मृति), तो आप केवल स्ट्रिंग सदस्यों को साफ़ कर सकते हैं, लेकिन आपके लिए ऐसा करने के लिए कोई भी लाइब्रेरी कॉल नहीं है। इसके बजाय, आपको एक लूप लिखना होगा और प्रत्येक रिकॉर्ड के फ़ील्ड को स्वयं साफ़ करना होगा।
for i := 0 to High(transactions) do begin
transactions[i].alias := '';
transactions[i].description := '';
end;
अगर वहाँ समाशोधन जरूरत है कि रिकॉर्ड में क्षेत्रों के बहुत सारे हैं, तो यह अधिक सरणी के प्रत्येक तत्व के लिए एक डिफ़ॉल्ट TTransaction
मान देना सुविधाजनक हो सकता है। आप Default
फ़ंक्शन का उपयोग कर सकते हैं, या डेल्फी के पुराने संस्करणों में आप एक TTransaction
अपने सभी क्षेत्रों स्पष्ट पहले से ही है कि घोषणा कर सकते हैं:
const
ClearTransaction: TTransaction = (alias: ''; description: ''; creation: 0; count: 0);
for i := 0 to High(transactions) do
transactions[i] := ClearTransaction;
// or
transactions[i] := Default(TTransaction);
स्रोत
2013-02-19 13:23:49
क्या 'अंतिमकरण' वास्तव में 'ए' के मान को बदलता है, हालांकि? मैं हमेशा इस धारणा के तहत रहा हूं कि यह नहीं है - यह 'ए' में संग्रहीत गतिशील सरणी के मूल पते को छोड़कर स्मृति को मुक्त करता है, बाद में किसी भी कॉल की प्रत्याशा में' फ्री 'या' प्रारंभ करें '। –
@Rob एक गतिशील सरणी के लिए, ये तीन विकल्प समकक्ष हैं। प्रबंधित प्रकार के लिए, अंतिम रूप से संदर्भ को सेट करना होगा। इसमें कोई विकल्प नहीं है। एक गतिशील सरणी प्रकार के स्थानीय चर पर विचार करें। –
@ डेविड हेफरनन उन मामलों में जहां सरणी की उच्चतम सीमा 10 है, जो उपयोग करने के लिए बेहतर है: 1- नील पर सेट करें और सभी को फिर से बनाएं। 2 - प्रयुक्त इंडेक्स को अगले मानों से संबद्ध करें ?? – EProgrammerNotFound