Comment implémenter correctement le pattern Singleton en C++ avec le multithreading ?
Bonjour à tous ! Je suis un développeur C++ débutant et j'essaie de comprendre le pattern Singleton. J'ai lu que c'est un pattern de création qui garantit qu'une classe n'a qu'une seule instance et fournit un point d'accès global à celle-ci.
J'ai écrit une implémentation simple pour un 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;
```
Mais plusieurs points me gênent :
1. Dans un environnement multithread, plusieurs instances peuvent être créées si deux threads appellent getInstance() simultanément.
2. Il n'y a pas de mécanisme de suppression de l'objet — cela entraîne une fuite mémoire.
3. J'ai vu différentes variantes : avec des mutex, avec std::call_once, avec des statiques magiques. Laquelle est correcte ?
No answers yet.
Connectez-vous pour laisser une réponse
Blogs
Journalisation dans les applications JavaScript : meilleures pratiques pour Node.js
Client HTTP en Swift : faire des requêtes correctement de A à Z
Travailler avec le système de fichiers en Go : guide pratique
Handler() est obsolète dans Android ? Que utiliser en 2025