AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie entferne ich ein Singleton am besten beim Beenden der Anwendung wieder?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie entferne ich ein Singleton am besten beim Beenden der Anwendung wieder?

Ein Thema von Der schöne Günther · begonnen am 25. Mär 2013 · letzter Beitrag vom 25. Mär 2013
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.155 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Wie entferne ich ein Singleton am besten beim Beenden der Anwendung wieder?

  Alt 25. Mär 2013, 13:42
Delphi-Version: XE2
Hallo -

Ich frage mich gerade, wie man es am besten anstellt, ein Singleton beim Beenden der Anwendung am besten wieder abzuräumen

Zwei Möglichkeiten fallen mir ein:
  1. Nach 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 ReportMemoryLeaksOnShutdown := True; keine Fehlermeldungen

Der Klassendestruktor wird übrigens später als die erste Methode aufgerufen.
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#2

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

  Alt 25. Mär 2013, 13:58
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.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 25. Mär 2013, 14:23
"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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.155 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

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

  Alt 25. Mär 2013, 17:26
Vielen Dank
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 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