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?
No answers yet.
Inicia sesión para dejar una respuesta