Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie entferne ich ein Singleton am besten beim Beenden der Anwendung wieder? (https://www.delphipraxis.net/173941-wie-entferne-ich-ein-singleton-am-besten-beim-beenden-der-anwendung-wieder.html)

Der schöne Günther 25. Mär 2013 12:42

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:
  1. Nach
    Delphi-Quellcode:
    Application.Run()
  2. Mittels Klassendestruktor


Zur Erläuterung:

1)
Delphi-Quellcode:
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
  TLogger.getInstance.Free();
end.
2)
Delphi-Quellcode:
class destructor TSingleton.Destroy();
begin
   if Assigned(instance) then instance.Free();
end;

Funktionieren tut beides bestens, jedenfalls bekomme ich bei
Delphi-Quellcode:
ReportMemoryLeaksOnShutdown := True;
keine Fehlermeldungen :stupid:

Der Klassendestruktor wird übrigens später als die erste Methode aufgerufen.

CCRDude 25. Mär 2013 12:58

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.

stahli 25. Mär 2013 13:23

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.

Der schöne Günther 25. Mär 2013 16:26

AW: Wie entferne ich ein Singleton am besten beim Beenden der Anwendung wieder?
 
Vielen Dank :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:42 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