Singleton: Wie soll es verwendet werden?C++

Programme in C++. Entwicklerforum
Guest
 Singleton: Wie soll es verwendet werden?

Post by Guest »

Bearbeiten:
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
Meine Hoffnung Der Grund für diesen Artikel liegt darin, dass wir an einem einzigen Ort (anstatt googeln und mehrere Websites durchsuchen zu müssen) eine verlässliche Quelle dafür sammeln können, wann (und wie) ein Singleton richtig verwendet werden sollte. Geeignet wäre auch eine Liste von Anti-Usages und häufigen schlechten Implementierungen, in der erklärt wird, warum sie nicht funktionieren, und bei guten Implementierungen ihre Schwächen.



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;
}
};
OK. Lassen Sie uns gemeinsam Kritik und andere Umsetzungen zusammentragen.

:-)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post