Cómo implementar correctamente el patrón Singleton en C++ (enfoques modernos)
¡Saludos, colegas! Recientemente comencé a estudiar patrones de diseño y me topé con Singleton. Entiendo la idea: garantizar que una clase tenga solo una instancia y proporcionar un punto de acceso global a ella. Pero en C++ veo muchas implementaciones diferentes y no puedo entender cuál es la correcta y segura para hilos.
Por ejemplo, escribí esta versión simple:
```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;
```
Pero me preocupan varios puntos:
1. Esto no es seguro para hilos: si dos hilos llaman a `getInstance()` simultáneamente, se pueden crear dos objetos.
2. ¿Es necesario eliminar explícitamente el objeto? Si es así, ¿cómo? ¿En el destructor? Pero entonces, ¿quién llamará al destructor?
3. Veo en internet variantes con `std::call_once`