L'implémentation de Meyer's Singleton, présentée comme un Singleton& instance() statique, soulève des questions concernant sa fonctionnalité singleton.
La nature singleton découle du mot-clé static. La durée de stockage statique des variables locales signifie qu'une seule instance existe dans tout le programme.
Considérez ce pseudocode équivalent (pas le code C 98 réel) :
static bool __guard = false; static char __storage[sizeof(Singleton)]; Singleton& Instance() { if (!__guard ) { __guard = true; new (__storage) Singleton(); } return *reinterpret_cast<Singleton*&>(__storage); }
Cela résume à peu près le comportement de l'original.
Dans l'implémentation actuelle de C 11, une variable de garde est utilisée pour chaque statique, agissant comme une barrière pour les threads.
Les deux implémentations appliquent l'intégrité singleton, mais diffèrent par la gestion des threads et la complexité du code.
Mise en œuvre de Meyer :
Mise en œuvre Wikipédia :
L'implémentation de Meyer est en effet un Singleton en raison de la durée de stockage statique empêchant plusieurs instanciations. Le choix entre les deux implémentations dépend de l'application spécifique et des considérations multithreading.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!