Hallo Zusammen,
ich habe soeben festgestellt dass Dictionary.Remove(0) den Destructor des Objectes nicht aufruft.
Oder ist es möglicherweise nicht notwendig weil ich keine Instanzvariable für das UserObject
verwende sondern direkt als Parameter das Object erzeuge?
Andernfalls müsste ich durch das komplette Disct. durchlaufen und selbst das UserObject zerstören.
Code:
procedure TfrmMain.CreateUserObjectDict;
var i,n:Integer;
NS: WideString;
begin
if Assigned(UserObjectDict)
then DeleteUserObjectDict;
UserObjectDict := TDictionary<integer, TUserObject>.Create;
for i := 0 to FDataCtrl1.UserCount-1 do
begin
FDataCtrl1.GetExtension(i,NS);
n := StrToIntDef(NS,-1);
if (n>0)
then UserObjectDict.AddOrSetValue(n, TUserObject.Create(i, NS) ); <<<UserObject erzeugen und ins Dict schreiben
end;{for}
end;{CreateUserObjectDict}
procedure TfrmMain.DeleteUserObjectDict;
var i:Integer;
begin
if not Assigned(UserObjectDict) then Exit;
for i := 0 to UserObjectDict.Count-1
do UserObjectDict.Remove(0); <<< hier würde ich den Aufruf des TUserObject.Destructor erwarten
UserObjectDict.TrimExcess;
UserObjectDict.Free;
end;{DeleteUserObjectDict}
Gruß Kostas