這裏我有一個棘手的情況,我想。我需要能夠釋放一個記錄字段的對象。如果它是一個類,我通常會在析構函數中寫入清理代碼。但是由於記錄類型不能引入「析構函數」,因此如何調用TObject(Field).Free;?如何釋放記錄中的對象?
將會有兩種用法我預測:
用一個新的更換記錄。
我覺得這個用法很容易實現。由於記錄是值類型,因此它們在賦值時被複制,所以我可以重載賦值運算符並釋放舊記錄擁有的對象。
(編輯:分配超載無法這是我新的信息...)
退出創紀錄的變量定義成範圍。
我可以想到一個私有方法,可以釋放這些對象,並且可以手動調用該方法。但是,這裏是相同的問題:如何使它更記錄?這種行爲那種感覺就像一個類...
這裏是一個樣本(顯然不打算使用):
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範圍REC沒有更多但從TList依然保持着它的存在導致內存泄漏...
記錄分配不能重載。 – kludg
我沒有意識到這一點(從來沒有需要之前),但我現在瞭解它:)是的,它不能被超載... –