यहां मुझे एक मुश्किल स्थिति है, मुझे लगता है। मुझे किसी ऑब्जेक्ट को मुक्त करने में सक्षम होना चाहिए जो रिकॉर्ड का क्षेत्र है। अगर मैं कक्षा थी, तो मैं आमतौर पर विनाशक में क्लीनअप कोड लिखूंगा। लेकिन चूंकि रिकॉर्ड प्रकार "विनाशक" पेश नहीं कर सकते हैं, इसलिए टॉब्जेक्ट (फ़ील्ड) को कॉल करना संभव होगा। फ्री;?किसी ऑब्जेक्ट को रिकॉर्ड करने के लिए कैसे रिकॉर्ड करें?
एक नया एक के साथ रिकॉर्ड की जगह:
दो उपयोग के प्रकार मैं भविष्यवाणी वहाँ हो जाएगा।
मुझे लगता है कि यह उपयोग लागू करना आसान होगा। चूंकि रिकॉर्ड मूल्य प्रकार होते हैं और इसलिए उन्हें असाइनमेंट पर कॉपी किया जाता है, इसलिए मैं असाइनिंग ऑपरेटर को अधिभारित कर सकता हूं और पुरानी रिकॉर्ड के स्वामित्व वाली वस्तुओं को मुक्त कर सकता हूं।
(संपादित करें: असाइनमेंट से अधिक भार में सक्षम नहीं था कि मेरे लिए एक नई जानकारी है ..।)
गुंजाइश जहां रिकॉर्ड चर परिभाषित बाहर निकल रहा है।
मैं एक निजी विधि के बारे में सोच सकता हूं जो वस्तुओं को मुक्त करता है और इस विधि को मैन्युअल रूप से दायरे उत्तेजना पर बुलाया जा सकता है। लेकिन, यह वही प्रश्न है: इसे और अधिक रिकॉर्ड करने के लिए कैसे? यह व्यवहार तरह के एक वर्ग की तरह लगता है ...
यहां एक नमूना (नहीं इरादा उपयोग और स्पष्ट रूप से) है:
TProperties = record
... some other spesific typed fields: Integers, pointers etc..
FBaseData: Pointer;
FAdditionalData: TList<Pointer>;
//FAdditionalData: array of Pointer; this was the first intended definition
end;
मान लें,
FAdditionalData:=TList<Pointer>.Crete;
बुलाया
जैसे सार्वजनिक रूप से फ़ील्ड तक पहुंचकर रिकॉर्ड कन्स्ट्रक्टर या रिकॉर्ड वर्चुअल स्कोप में मैन्युअल रूप सेprocedure TFormX.ButtonXClick(Sender: TObject);
var
rec: TProperties;
begin
//rec:=TProperties.Create(with some parameters);
rec.FAdditionalData:=TList<Pointer>.Create;
//do some work with rec
end;
ButtonClick गुंजाइश आरईसी अधिक नहीं है, लेकिन एक TList अभी भी अपने अस्तित्व जो मेमोरी लीक करने का कारण बनता रहता है ...
रिकॉर्ड असाइनमेंट ओवरलोड नहीं किया जा सकता है। – kludg
मुझे इसके बारे में पता नहीं था (पहले कभी नहीं चाहिए), लेकिन मैंने इसे अभी सीखा है :) हाँ, यह अधिभारित करने में सक्षम नहीं था ... –