Avatar ·

Comment implémenter correctement le pattern Singleton en C++ avec le multithreading ?

Bonjour à tous ! Je suis un développeur C++ débutant et j'essaie de comprendre le pattern Singleton. J'ai lu que c'est un pattern de création qui garantit qu'une classe n'a qu'une seule instance et fournit un point d'accès global à celle-ci. J'ai écrit une implémentation simple pour un logger : ```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; ``` Mais plusieurs points me gênent : 1. Dans un environnement multithread, plusieurs instances peuvent être créées si deux threads appellent getInstance() simultanément. 2. Il n'y a pas de mécanisme de suppression de l'objet — cela entraîne une fuite mémoire. 3. J'ai vu différentes variantes : avec des mutex, avec std::call_once, avec des statiques magiques. Laquelle est correcte ?