Como implementar corretamente o padrão Singleton em C++ considerando multithreading?
Olá a todos! Sou um desenvolvedor C++ iniciante e estou tentando entender o padrão Singleton. Li que é um padrão de criação que garante que uma classe tenha apenas uma instância e fornece um ponto de acesso global a ela.
Escrevi uma implementação simples para um 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;
```
Mas estou com algumas dúvidas:
1. Em um ambiente multithread, várias instâncias podem ser criadas se duas threads chamarem getInstance() simultaneamente.
2. Não há mecanismo para deletar o objeto — resultando em vazamento de memória.
3. Vi diferentes variações: com mutexes, com std::call_once, com statics mágicos. Qual deles é o correto?