Von einer anderen Frage habe ich eine Antwort bereitgestellt, die Links zu vielen Fragen/Antworten zu Singletons enthält: Weitere Informationen zu Singletons finden Sie hier:
Also habe ich den Thread „Singletons: gutes Design oder eine Krücke?“ gelesen.
Und der Streit tobt immer noch.
Ich sehe Singletons als Designmuster (gut und schlecht).
Das Problem mit Singleton ist nicht das Muster, sondern die Benutzer (tut mir leid). Jeder und sein Vater denken, dass sie es richtig umsetzen können (und aus den vielen Interviews, die ich geführt habe, geht hervor, dass die meisten Menschen das nicht können). Auch weil jeder denkt, er könne einen korrekten Singleton implementieren, missbraucht er das Muster und verwendet es in Situationen, die nicht angemessen sind (Ersetzen globaler Variablen durch Singletons!).
Also das Wichtigste Fragen, die beantwortet werden müssen, sind:
- Wann sollten Sie einen Singleton verwenden?
- Wie geht es Ihnen? Einen Singleton richtig implementieren
Also los geht's:
Ich werde meine Hand hochhalten und sagen, dass ich das verwende, aber wahrscheinlich Probleme damit habe.
Ich mag „Scott Myers“ Behandlung des Themas in seinen Büchern „Effective C++"
Gute Situationen für die Verwendung von Singletons (nicht viele):
- Protokollierungs-Frameworks
- Thread-Recycling-Pools
Code: Select all
/*
* C++ Singleton
* Limitation: Single Threaded Design
* See: http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf
* For problems associated with locking in multi threaded applications
*
* Limitation:
* If you use this Singleton (A) within a destructor of another Singleton (B)
* This Singleton (A) must be fully constructed before the constructor of (B)
* is called.
*/
class MySingleton
{
private:
// Private Constructor
MySingleton();
// Stop the compiler generating methods of copy the object
MySingleton(MySingleton const& copy); // Not Implemented
MySingleton& operator=(MySingleton const& copy); // Not Implemented
public:
static MySingleton& getInstance()
{
// The only instance
// Guaranteed to be lazy initialized
// Guaranteed that it will be destroyed correctly
static MySingleton instance;
return instance;
}
};
