Avatar ·

Wie implementiert man das Singleton-Pattern in C++ korrekt unter Berücksichtigung von Multithreading?

Hallo zusammen! Ich bin ein C++-Anfänger und versuche, das Singleton-Pattern zu verstehen. Ich habe gelesen, dass es ein Erzeugungsmuster ist, das sicherstellt, dass eine Klasse nur eine Instanz hat, und einen globalen Zugriffspunkt darauf bietet. Ich habe eine einfache Implementierung für einen Logger geschrieben: ```cpp class Logger { public: static Logger* getInstance() { if (instance == nullptr) { instance = new Logger(); } return instance; } void log(const std::string& msg) { std::cout << msg << std::endl; } private: Logger() {} static Logger* instance; }; Logger* Logger::instance = nullptr; ``` Aber mehrere Punkte verwirren mich: 1. In einer Multithreading-Umgebung könnten mehrere Instanzen erstellt werden, wenn zwei Threads gleichzeitig getInstance() aufrufen. 2. Es gibt keinen Mechanismus zum Löschen des Objekts — das führt zu einem Memory Leak. 3. Ich habe verschiedene Varianten gesehen: mit Mutexen, mit std::call_once, mit Magic Statics. Welche ist die richtige?