Avatar ·

Como implementar corretamente o padrão Singleton em C++ (abordagens modernas)

Olá, colegas! Recentemente comecei a estudar padrões de projeto e me deparei com o Singleton. Entendo a ideia: garantir que uma classe tenha apenas uma instância e fornecer um ponto de acesso global a ela. Mas em C++ vejo muitas implementações diferentes e não consigo entender qual delas é correta e thread-safe. Por exemplo, escrevi uma versão simples assim: ```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; ``` Mas tenho algumas dúvidas: 1. Isso não é thread-safe: se duas threads chamarem `getInstance()` ao mesmo tempo, podem ser criados dois objetos. 2. É necessário deletar o objeto explicitamente? Se sim, como? No destrutor? Mas então quem chamará o destrutor? 3. Vejo na internet versões com `std::call_once