Privater Destruktor für Singleton-Klasse

8

Ist ein privater Destruktor für eine Singleton-Klasse zwingend erforderlich?

    
KhanS 01.04.2010, 10:40
quelle

6 Antworten

6

Das ist vielleicht nicht das, wonach Sie suchen. Aber als Referenz verwende ich es wie folgt:

%Vor%

Am Ende meines Programms rufe ich dann das Objekt an. Wie Péter darauf hinweist, wird das System den Speicher zurückfordern, wenn Ihr Programm endet, also gibt es keinen wirklichen Grund. Der Grund, warum ich einen Zerstörer benutze, ist, wenn Ogre sich beschwert hat, dass ich nicht die gesamte Speicherkapazität freigegeben habe, die ich zugewiesen habe. Danach benutze ich es einfach als "gute Manieren", da ich gerne nach mir aufräume.

    
Default 01.04.2010, 11:03
quelle
11

Wenn das Singleton als Variable im globalen Gültigkeitsbereich implementiert wird, muss es einen öffentlichen Destruktor haben. Nur öffentliche Mitglieder sind auf globaler Ebene zugänglich.

Wenn es in seiner eigenen Klasse als statisches Member oder statisches Local deklariert ist, ist der Destruktor möglicherweise privat. Der Destruktor wird innerhalb des Klassenbereichs aufgerufen, auf den zugegriffen werden kann, wenn das Programm beendet wird. Das ist eine Möglichkeit, das Objekt als Singleton durchzusetzen. Müssen Sie das stark durchsetzen? Wenn ja, ja. Es hängt davon ab, was Sie mit "obligatorisch" meinen.

%Vor%     
Potatoswatter 01.04.2010 11:01
quelle
4

Alle Klassen haben einen Destruktor. Wenn Sie keinen erstellen, wird der Compiler dies für Sie tun. Ihre Frage kann also neu formuliert werden: Muss der Destruktor für eine Singleton-Klasse privat sein?

Die einfache Antwort ist nein, es muss nicht sein.

Eine interessantere Frage: Ist es eine gute Idee, den Destruktor einer Singleton-Klasse privat zu machen?

Ja, im Allgemeinen ist es eine gute Idee. Wenn Sie es privat machen, wird Ihr Client-Code den Destruktor nicht zufällig aufrufen. Der Aufruf des Destruktors würde dazu führen, dass das Singleton für alle Clients fehlschlägt, da die Instanz ungültig wird.

    
Mark Byers 01.04.2010 10:46
quelle
4

Meiner Meinung nach sollte der Destruktor eines Signletons privat sein. Anderenfalls kann jemand "Löschen" für Ihre Singleton-Instanz aufrufen. Ich weiß, normalerweise wird es niemand tun. Aber wenn wir über Exzellenz Design sprechen, muss es gegen alle möglichen beabsichtigten oder uneinheitlichen Schäden resistent sein.

Mit dem modernen C ++ ist es erlaubt, auch private Destruktoren für statisch konstruierte Objekte zu deklarieren. Hier ist mein Code-Snippet für Singleton:

%Vor%     
Vadim Sukhorukov 19.09.2016 15:05
quelle
2

Nein, und im Allgemeinen erhalten Objekte in C ++ keine privaten Destruktoren. Denken Sie daran, dass Singleton bedeutet, dass es nur eine Instanz gibt, und daher muss die Konstruktion, nicht die Zerstörung, kontrolliert / verhindert werden. Normalerweise hat ein Singleton einen privaten Konstruktor, einen öffentlichen Destruktor, eine private statische Instanzvariable und eine öffentliche statische Singleton-get / lazy-Konstruktionsfunktion, obwohl es Variationen in diesem Muster gibt.

    
Michael Aaron Safyan 01.04.2010 11:27
quelle
1

Sie können den Verweis auf Ihre Singleton-Instanz zurückgeben.

%Vor%     
baris.aydinoz 01.04.2010 11:20
quelle

Tags und Links