Forum: Object-Pascal / Delphi-Language
by Caps,
16. Jun 2020
Achso, es gibt dann in der ganzen Hierarchie nur noch exakt einen Destruktor?
Das wusste ich nicht. Ok, dann macht es Sinn :). Man lernt nie aus.
Forum: Object-Pascal / Delphi-Language
by Caps,
16. Jun 2020
Aber wird bei Objects .Free nicht nur der Destruktor von TObject aufgerufen?
Es soll ja aber mein Destruktor aufgerufen werden. Warum muss ich da nicht casten?
Forum: Object-Pascal / Delphi-Language
by Caps,
16. Jun 2020
Aber in #19 gebe ich doch alle Objekte frei.
Forum: Object-Pascal / Delphi-Language
by Caps,
16. Jun 2020
Ok, aber wenn man nur den Destruktor von TObject aufruft, dann wird doch der Baum nicht rekursiv freigegeben?
Forum: Object-Pascal / Delphi-Language
by Caps,
16. Jun 2020
Der Vollständigkeit halber meine jetzige Lösung, falls jemand ein ähnliches Problem hat:
Neuer Typ:
TStringTree = class(TStringList)
public
destructor Destroy; override;
end;
Forum: Object-Pascal / Delphi-Language
by Caps,
16. Jun 2020
Moin,
nur zur Unterhaltung: es geht doch, wenn auch nur mit abenteuerlichem Herumgecaste:
procedure FreeStringList(var List);
var
i: Integer;
Obj, Obj_: TObject;
List_: TStringList;
Forum: Object-Pascal / Delphi-Language
by Caps,
15. Jun 2020
Ja, ich weiß was du meinst.
Die Stelle war ebenfalls ein Destruktor, der nochmal geprüft hat, ob das Objekt nil ist, und wenn nicht, Free aufruft. Du hast schon recht, dass das eigentlich nicht nötig sein sollte, es ist dennoch momentan so.
Mein Problem war das rekursive Freigeben einer Stringliste.
Grüße!
Forum: Object-Pascal / Delphi-Language
by Caps,
15. Jun 2020
Leider greife ich hinterher noch drauf zu, vorher prüfe ich aber, ob die Liste nil ist, und da hat's geknallt ^^.
Forum: Object-Pascal / Delphi-Language
by Caps,
15. Jun 2020
Stimmt. Destruktor überschreiben. Hm, danke, ich glaube jetzt wird's irgendwie klappen.
Danke und Grüße!
Caps
Forum: Object-Pascal / Delphi-Language
by Caps,
15. Jun 2020
Ist das so? Ich war mir nicht ganz sicher, ob der Destruktor von TStringList die Objekte ebenfalls freigibt. Ich glaube dann hab ich die Hilfe falsch verstanden, da steht "Destroy gibt den Speicherplatz frei, der für die String-Liste und die Objektreferenzen reserviert war" - das hab ich nur auf die Pointer bezogen, nicht auch auf die Objekte selbst.
Grüße!
Forum: Object-Pascal / Delphi-Language
by Caps,
15. Jun 2020
Hallöle,
ich möchte mit einer Prozedur eine Stringliste rekursiv freigeben.
Hintergrund:
Ich verwende Stringlisten, an deren Objects-Eigenschaft(en) weitere Stringlisten hängen, so dass sich ein Baum als Datenstruktur ergibt.
Die Funktion ist angelehnt an FreeAndNil() und sieht folgendermaßen aus: