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