Moin!
Flamefire hat folgendes geschrieben: |
| Hab mal drüber nachgedacht: |
Na also, geht doch.
Ich würde es aber trotzdem so ansetzen:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| type TOrdner = class(TObject) private FOwner: TOrdner; FName: String; FOrdner: TObjectList; FDateien: TStringList; public constructor Create(const AName: String = ''; AOwner: TOrdner = NIL); destructor Destroy; override; property Owner: TOrdner read FOwner; property Name: String read FName write FName; property Ordner: TObjectList read FOrdner; property Dateien: TStringList read FDateien; end;
implementation
constructor TOrdner.Create(const AName: String = ''; AOwner: TOrdner = NIL); begin inherited Create; FName := AName; FOwner := AOwner; FOrdner := TObjectlist.Create; FDateien := TStringList.Create; if Assigned(FOwner) then FOwner.Ordner.Add(Self); end;
destructor TOrdner.Destroy; begin FreeAndNil(FDateien); FreeAndNil(FOrdner); inherited; end; |
Um einen solchen Baum freizugeben reicht es dann, den ersten Root-Ordner mit .Free freizugeben. Allerdings ist zu beachten, dass beim Löschen von einzelnen Unterordnern über eine (externe) Objekt-Referenz trotzdem ein Eintrag in der FOrdner-Objectlist des Owners verbleibt. Deshalb also besser immer über die Methoden der enthaltenden TObjectList löschen (.Delete oder .Remove).
Flamefire hat folgendes geschrieben: |
| Wenn Ich richtig liege wird bei "Ordner.Free;" für alle Ordner in der Liste "Free" aufgerufen und damit ist das schon rekursiv. Richtig? |
Exakt, darauf läuft es hinaus.
cu
Narses
There are 10 types of people - those who understand binary and those who don´t.