Im Folgenden wird eine bekannte Implementierung des Singleton-Musters in C++ vorgestellt.
Ich bin mir jedoch nicht ganz sicher, ob es thread-sicher ist.
Ausgehend von den Antworten auf ähnliche Fragen, die hier zuvor gestellt wurden, scheint es sicher zu sein.
Ist das so?
//Curiously Recurring Template Pattern
//Separates a class from its Singleton-ness (almost).
#include <iostream>
using namespace std;
template<class T> class Singleton {
Singleton(const Singleton&);
Singleton& operator=(const Singleton&);
protected:
Singleton() {}
virtual ~Singleton() {}
public:
static T& instance() {
static T theInstance;
return theInstance;
}
};
// A sample class to be made into a Singleton
class MyClass : public Singleton<MyClass> {
int x;
protected:
friend class Singleton<MyClass>;
MyClass() { x = 0; }
public:
void setValue(int n) { x = n; }
int getValue() const { return x; }
};
0 Stimmen
Warum haben Sie daraus ein WIKI gemacht? Das ist eine völlig berechtigte Frage.
0 Stimmen
Sie haben keine Gründe genannt, warum Sie dass die Implementierung des Musters nicht thread-sicher ist. Bitte tun Sie das.
0 Stimmen
Was ist das Ziel der Freundschaftsklasse? Kann mir das jemand beantworten?
0 Stimmen
Oh, Mist! Ich hätte in den FAQs nachsehen sollen, was es bedeutet, anstatt anzunehmen, dass es etwas ist.
0 Stimmen
@Ankur Ich denke, Sie können Ihre Frage bearbeiten und das Häkchen bei Community WIKI entfernen.
0 Stimmen
@Jared, Bearbeiten hat keine Option zum Deaktivieren von Wiki :(
1 Stimmen
@Ahmed. Sie ist da, damit die Anweisung "static T theInstance" kompiliert werden kann. Wie Sie vielleicht sehen, hat MyClass einen geschützten Konstruktor, so dass wir den Friend-Spezifizierer brauchen, damit die Singleton-Klasse (Singleton<MyClass>, um genau zu sein) ein lokales static vom Typ MyClass deklarieren kann.