Einzelnen Beitrag anzeigen

SusiT

Registriert seit: 15. Mai 2014
29 Beiträge
 
#1

Packed record mit Dictionary als Variable, Richtig aufräumen

  Alt 15. Jan 2024, 21:52
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
  Mit Zitat antworten Zitat