Avatar ·

Cómo implementar correctamente el patrón Singleton en C++ teniendo en cuenta la concurrencia

¡Hola a todos! Soy un desarrollador principiante de C++ y estoy tratando de entender el patrón Singleton. Leí que es un patrón creacional que garantiza que una clase tenga solo una instancia y proporciona un punto de acceso global a ella. Escribí una implementación simple para 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; ``` Pero me preocupan varios puntos: 1. En un entorno multihilo, se pueden crear varias instancias si dos hilos llaman a getInstance() simultáneamente. 2. No hay un mecanismo para eliminar el objeto, lo que provoca una fuga de memoria. 3. He visto diferentes variantes: con mutex, con std::call_once, con estáticos mágicos. ¿Cuál es la correcta?