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