![]() |
AW: Rekursives Freigeben einer TStringList // Compilerfehler
Delphi-Quellcode:
Sollte dasselbe bewirken, nur kürzer.
destructor TStringTree.Destroy;
var i: Integer; begin for i := 0 to Count-1 do Objects[i].Free; inherited; end; |
AW: Rekursives Freigeben einer TStringList // Compilerfehler
Delphi-Quellcode:
Ohne die Abfrage, ob's nun 'ne TStringList ist oder nicht, hat es den Vorteil, dass alle Objekte freigegeben werden und nicht nur die Stringlisten. Spart (vermutlich) das eine oder andere Speicherleck ;-)
destructor TStringTree.Destroy;
var i: Integer; begin for i := 0 to Count - 1 do FreeAndNil(Objects[i]); end; |
AW: Rekursives Freigeben einer TStringList // Compilerfehler
Ok, aber wenn man nur den Destruktor von TObject aufruft, dann wird doch der Baum nicht rekursiv freigegeben?
|
AW: Rekursives Freigeben einer TStringList // Compilerfehler
Zitat:
|
AW: Rekursives Freigeben einer TStringList // Compilerfehler
Genau deshalb soll der Destruktor grundsätzlich überschrieben werden und nicht verdeckt. Probier es doch einfach mal aus.
|
AW: Rekursives Freigeben einer TStringList // Compilerfehler
Zitat:
Es soll ja aber mein Destruktor aufgerufen werden. Warum muss ich da nicht casten? |
AW: Rekursives Freigeben einer TStringList // Compilerfehler
Zitat:
Das wusste ich nicht. Ok, dann macht es Sinn :). Man lernt nie aus. |
AW: Rekursives Freigeben einer TStringList // Compilerfehler
Zitat:
Der Code von DeddyH ist vollkommen ausreichend. Zitat:
Zitat:
Delphi-Quellcode:
.
virtual
|
AW: Rekursives Freigeben einer TStringList // Compilerfehler
Ok, ich glaube da komme ich an die Grenzen meiner OOP-Kenntnisse ^^.
Es gibt also nicht nur ein Destroy, weil inherited ja ein Vorfahr-Destroy aufruft, oder? Ich glaube jetzt bin ich verwirrter als vorher :shock: |
AW: Rekursives Freigeben einer TStringList // Compilerfehler
Virtuelle und dynamische Methoden können überschrieben werden. Wenn eine solche Methode einer Instanz aufgerufen wird, wird die Virtual Method Table (VMT) durchlaufen, ausgehend von der Klasse der Instanz in der Hierarchie aufsteigend, bis eine Implementation gefunden wird. Die wird dann abgearbeitet. Normalerweise möchte man die Methode aber nicht komplett ersetzen, sondern nur erweitern, weswegen man dann inherited aufruft, um die nächste Implementation in den höher gelegenen Klassen auszuführen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:08 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