Wie man das Singleton-Pattern in C++ richtig implementiert (moderne Ansätze)
Hallo, Kollegen! Ich habe kürzlich angefangen, Design Patterns zu lernen und bin auf Singleton gestoßen. Ich verstehe die Idee: sicherzustellen, dass eine Klasse nur eine Instanz hat und einen globalen Zugriffspunkt darauf bereitzustellen. Aber in C++ sehe ich viele verschiedene Implementierungen und kann nicht verstehen, welche korrekt und threadsicher ist.
Zum Beispiel habe ich diese einfache Variante geschrieben:
```cpp
class Singleton {
public:
static Singleton* getInstance() {
if (!instance) {
instance = new Singleton();
}
return instance;
}
void doSomething() { /* ... */ }
private:
Singleton() {}
static Singleton* instance;
};
Singleton* Singleton::instance = nullptr;
```
Aber mehrere Punkte verwirren mich:
1. Das ist nicht threadsicher: Wenn zwei Threads gleichzeitig `getInstance()` aufrufen, könnten zwei Objekte erstellt werden.
2. Muss das Objekt explizit gelöscht werden? Wenn ja, wie? Im Destruktor? Aber wer ruft dann den Destruktor auf?
3. Ich sehe im Internet Varianten mit `std::call_once
Noch keine Antworten.
Anmelden um eine Antwort zu hinterlassen