![]() |
AW: Rekursives Freigeben einer TStringList // Compilerfehler
Zitat:
Aber warum wird dann bei Objects [i].Free der Destruktor von TStringTree aufgerufen? Woher weiß denn der Compiler, welcher Typ da drin steckt? Also was ich meine ist: wenn ich von einer Basisklasse zwei verschiedene Klassen ableite, und dann den Destruktor der Basisklasse (TObject) aufrufe, dann kann der Compiler doch gar nicht entscheiden, welcher Typ nun wirklich an dem Zeiger dranhängt, oder bin ich völlig abwegig? Vermutlich müsste das mal in einen anderen Thread (OOP oder so ^^) |
AW: Rekursives Freigeben einer TStringList // Compilerfehler
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:
bzw.
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;
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; |
AW: Rekursives Freigeben einer TStringList // Compilerfehler
Das wird Delphi 5 aber freuen, was es plötzlich so alles kann :stupid:
|
AW: Rekursives Freigeben einer TStringList // Compilerfehler
Jupp :angle:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz