Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.376 Beiträge
Delphi 12 Athens
|
AW: Rekursives Freigeben einer TStringList // Compilerfehler
16. Jun 2020, 13:23
Da außen die Variable NIL werden soll, das aber beim Property "Objects" nicht geht, macht es sich mit "einer" Funktion nicht so gut.
Delphi-Quellcode:
procedure FreeStringList(const [ref] List: TStrings);
procedure Walk(Obj: TObject);
begin
if Obj is TStrings then
for var Obj2 in TStrings(Obj).ToObjectArray do
Walk(Obj2);
Obj.Free;
end;
begin
// wie FreeAndNil : modern, typsicher mit CONST-REF -> https://dalijap.blogspot.com/2020/06/magic-behind-freeandnil.html
var Temp := List;
TObject(Pointer(@List)^) := nil;
Walk(Temp);
end;
bzw.
Delphi-Quellcode:
procedure FreeStringList(var List{: TStrings});
procedure Walk(Obj: TObject);
var
i: Integer;
begin
if Obj is TStrings then
for i := TStrings(Obj).Count-1 downto 0 do
Walk(TStrings(Obj).Objects);
Obj.Free;
end;
var
Temp: TStrings;
begin
// wie FreeAndNil : alt, mit VAR im Funktionskopf
Temp := TStrings(List);
List := nil;
Walk(Temp);
end;
Ein Therapeut entspricht 1024 Gigapeut.
Geändert von himitsu (16. Jun 2020 um 14:49 Uhr)
Grund: den Code aufgeteilt (neu und alt getrennt)
|