Avatar ·

Comment implémenter correctement le pattern Singleton en C++ (approches modernes)

Bonjour, collègues ! J'ai récemment commencé à étudier les patterns de conception et je suis tombé sur le Singleton. Je comprends l'idée : garantir qu'une classe n'a qu'une seule instance et fournir un point d'accès global à celle-ci. Mais en C++, je vois beaucoup d'implémentations différentes et je n'arrive pas à comprendre laquelle est correcte et thread-safe. Par exemple, j'ai écrit cette version simple : ```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; ``` Mais plusieurs points me gênent : 1. Ce n'est pas thread-safe : si deux threads appellent `getInstance()` en même temps, deux objets peuvent être créés. 2. Faut-il supprimer explicitement l'objet ? Si oui, comment ? Dans le destructeur ? Mais alors qui appellera le destructeur ? 3. Je vois sur Internet des versions avec `std::call_once