Avatar ·

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?