![]() |
Delphi-Version: XE2
Wie entferne ich ein Singleton am besten beim Beenden der Anwendung wieder?
Hallo -
Ich frage mich gerade, wie man es am besten anstellt, ein Singleton beim Beenden der Anwendung am besten wieder abzuräumen :gruebel: Zwei Möglichkeiten fallen mir ein:
Zur Erläuterung: 1)
Delphi-Quellcode:
2)
begin
Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Application.Run; TLogger.getInstance.Free(); end.
Delphi-Quellcode:
class destructor TSingleton.Destroy();
begin if Assigned(instance) then instance.Free(); end; Funktionieren tut beides bestens, jedenfalls bekomme ich bei
Delphi-Quellcode:
keine Fehlermeldungen :stupid:
ReportMemoryLeaksOnShutdown := True;
Der Klassendestruktor wird übrigens später als die erste Methode aufgerufen. |
AW: Wie entferne ich ein Singleton am besten beim Beenden der Anwendung wieder?
In welchem Kontext erstellt Du die Singleton-Instanz denn? Da nach Deinem Beispiel nicht in der Hauptprojektdatei, würde ich sie da auch nicht wieder freigeben. Das lädt doch geradezu Fehler bei der Verwendung in mehreren Projekten ein!
Singletons werden bei mir fast immer per Klassenkonstruktor & -destruktor gehandhabt. |
AW: Wie entferne ich ein Singleton am besten beim Beenden der Anwendung wieder?
"Früher" hätte man dies im initialization- und finalization-Abschnitt einer Unit getan. Das Singleton hätte somit Gültigkeit, solange die Unit genutzt wird.
Ein class constructor/destructor ist technisch letztlich identisch umgesetzt (die Initialisierung und Auflösung wird auch im initialization/finalization-Anschnitt der Unit umgesetzt), wird aber nach dem wiki nur durchgeführt, wenn die Klasse auch genutzt wird. Insofern wäre das der beste Weg. |
AW: Wie entferne ich ein Singleton am besten beim Beenden der Anwendung wieder?
Vielen Dank :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 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