Guten Abend,
ich habe einen packed Record mit einem Dictionary als Variable angelegt.
Delphi-Quellcode:
TCurrActivity = packed record
ActId : Integer;
NsRelatedRowsIds : TDictionary<String,Integer>;
procedure init;
procedure clear;
end;
Beim Erstellen wird init und beim aufräumen wird clear aufgerufen.
Delphi-Quellcode:
procedure TCurrActivity.init;
begin
ActId := 0;
Self.NsRelatedRowsIds := TDictionary<String,Integer>.Create;
end;
procedure TCurrActivity.clear;
begin
self := default(TCurrActivity);
end;
Mir erschließt sich gerade nicht wie die richtige Herangehensweise ist um das Dictionary richtig aufzuräumen, sobald das Packed Record freigegeben wird.
Normalerweise mache ich
Delphi-Quellcode:
NsRelatedRowsIds.Clear;
FreeAndNil(NsRelatedRowsIds);
um nach getaner Arbeit den Speicher eines Dicts wieder freizugeben.
Wie verhält sich das, wenn ich das Dict in einem packed record verschachtelt ist?
Am liebsten würde ich folgendes machen:
Delphi-Quellcode:
procedure TCurrActivity.clear;
begin
// Self.NsRelatedRowsIds.Clear;
// FreeAndNil(Self.NsRelatedRowsIds);
self := default(TCurrActivity);
Self.NsRelatedRowsIds.Clear;
FreeAndNil(Self.NsRelatedRowsIds);
end;
um das Dict im packed record richtig aufzuräumen, allerdings
gibt dies Zugriffsverletzungen.
Daher die Frage muss ich ein Dict welches in einem packed record Created ist auch wieder freigeben oder ist dies egal?
Macht das ganze Konstrukt bzw. die Idee überhaupt Sinn bzw ist so umsetzbar?
Vielen Dank und viele Grüße