Avatar ·

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`