![]() |
Wann Destruktor-Aufruf nötig?
Hi!
In welchen Fällen ist es eigentlich sinnvoll, den Destruktor aufzurufen? Wenn ich z.B. eine Instanz beim Programmstart per FInstanz := TKlasse.Create; erzeugt habe und den Konstruktor später nochmal aufrufen möchte, um alle Eigenschaften der Instanz zurückzusetzen, ist es dann nötig, vorher die alte Instanz zu destroyen? Wann ist der Aufruf von FInstanz.Destroy überhaupt angebracht? Nur beim Programmende? |
Re: Wann Destruktor-Aufruf nötig?
Hallo,
1. schreibe eine Methode Clear, die du sowohl im constructor als auch bei Bedarf aufrufen kannst. 2. rufe nie Destroy direkt auf, sondern nimm Free. Mit Clear brauchst du erst am Programmende Free aufrufen. Heiko |
Re: Wann Destruktor-Aufruf nötig?
Zitat:
Zitat:
|
Re: Wann Destruktor-Aufruf nötig?
Warum zerstört Delphi eigentlich nicht automatisch alles am Programmende?
|
Re: Wann Destruktor-Aufruf nötig?
Du stellst dir das etwas zu einfach vor, dafür bräuchte Delphi schon einen richtigen (naja, > 3/4) Garbage Collector. Und außer bei Klassen, die ein Handle auf externe Ressourcen halten, ist das Freigeben bei Programmende sowieso egal.
|
Re: Wann Destruktor-Aufruf nötig?
Jop, um Khabarakhs Äußerung ein wenig zu präzisieren, Windows markiert Speicher, den ein Programm gehalten hatte, wieder als frei, wenn das Programm beendet wird.
|
Re: Wann Destruktor-Aufruf nötig?
Dann sind Meinungen wie "jede Klasse braucht einen Destruktor" doch eigentlich Quatsch. Bei Klassen, die das ganze Programm über gebraucht werden, ist es doch dann meistens unnötig, überhaupt einen zu deklarieren, oder?
|
Re: Wann Destruktor-Aufruf nötig?
Eine Klasse weiß nicht, wie lange sie gebraucht wird(OOP). Sie sollte deshalb alles, was sie alloziiert, auch wieder freigeben. Das ist guter Stil.
Und Pauschalaussagen sind zwar meist kein "Quatsch", aber es gibt trotzdem immer Ausnahmen ;) PS: Schon TObject hat einen Destruktor. EIne Klasse ohne Destruktor gibts also gar nicht :stupid: |
Re: Wann Destruktor-Aufruf nötig?
Zitat:
|
Re: Wann Destruktor-Aufruf nötig?
Zitat:
Ein anderer Punkt ist, wenn man später mal feststellt, dass die Klasse doch besser von einer anderen Erben soll. In diesem Fall kann ein fehlender inherited Create Aufruf zu Problemen führen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 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