Re: Freigeben einer Pointerstruktur
Zitat:
Rekursion ist sehr beliebt bei Lehrern, ist elegant zu formulieren und man kann mit seinen Kenntnissen angeben, aber in der Praxis ist Rekursion fast immer Mist: wenn du 5000 Objekte hast, hast du 5000 ineinander verschachtelte Prozeduren. Das ist nicht nur völlig überflüssig, sondern auch nicht besonders gut zu debuggen. Gruss Reinhard |
Re: Freigeben einer Pointerstruktur
Zitat:
Rekursion kann extrem Praktisch sein, auch bei 5000 ineinander verschachtelten elementen. Wenn man seine verschachtelung versteht, dann geht das auch mit der Rekursion. Und um rekursion zu verstehen muss man eben rekursion verstanden haben (hab auch anfangst gedacht WTF, aber ist so, irgendwann hats klick gemacht und ich konnt super mit rekursion umgehen). Ein kleines Beispiel: Versuch mal iterativ Pre-, In- oder Postorder durchläufe durch einen Binärbaum. Also da find ich die Rekursion deutlich einfacher zu debuggen als iterationen mit einer queue (wüsse jetzt nicht wie das anders geht). Oder wenn ich eine Ordnerstruktur durchlaufen will um z.B. dateien zu suchen, ich denk nichtmal das die Windowssuche das iterativ macht. Also wie gesagt, in vielen Bereichen ist Rekursion der Iteration deutlich vorzuziehen. (mach z.B. mal obige Freigabeprozeduren iterativ, dann schauen wir mal was übersichtlicher ist). Aber jetzt hab ich genug "mit meinen Kenntnissen angegeben". MfG |
Re: Freigeben einer Pointerstruktur
Zitat:
dabei hast du eine iterative Lösung schon selbst fast erwähnt: "... prüfe ob .Next existiert, wenn ja, erst FreeMakro (Anchor.Next) aufrufen dann erst Aktuelles element freigeben " Ich würde die Liste von vorne durchlaufen und immer zuerst Next zwischenspeichern, bevor das aktuelle Element freigegeben wird. Gruss Reinhard |
Re: Freigeben einer Pointerstruktur
Zitat:
Rekursion heißt die Funktion ruft sich selbst wieder auf, das heißt wenn ich in FreeMakro wieder FreeMakro aufrufe, dann IST das rekursion und kein iterativer ansatz! |
Re: Freigeben einer Pointerstruktur
[quote="Reinhard KernIch würde die Liste von vorne durchlaufen und immer zuerst Next zwischenspeichern, bevor das aktuelle Element freigegeben wird.
[/quote] Vorschlag:
Delphi-Quellcode:
Gruss Reinhard
destructor TMyObjectList.Destroy; override;
var CurrentObject,NextObject : TMyObject; begin CurrentObject := FirstObject; { wie auch immer } if Assigned (CurrentObject) then { könnte ja leer sein } repeat NextObject := CurrentObject.Next; CurrentObject.Destroy; CurrentObject := NextObject; until not Assigned (CurrentObject; inherited Destroy; end; |
Re: Freigeben einer Pointerstruktur
und wo gibst du (wie in meinem fall) die 2. unterliste frei? dann wird der code nämlich schon länger.
|
Re: Freigeben einer Pointerstruktur
Zitat:
Gruss Reinhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz