Question

Je publierai bientôt un article sur mon blog, mais j'aimerais d'abord vérifier que je n'ai rien manqué.

Trouvez un exemple qui m'a manqué et je vous citerai dans mon message.

Le sujet est l'échec des implémentations Singleton :Dans quels cas pouvez-vous accidentellement obtenir plusieurs instances d'un singleton ?

Jusqu'à présent, j'ai trouvé :

  • Condition de concurrence au premier appel à instance()
  • Incorporation dans plusieurs DLL ou DLL et exécutable
  • Définition de modèle d'un singleton - classes réellement séparées

Y a-t-il d'autres moyens qui me manquent - peut-être avec l'héritage ?

Était-ce utile?

La solution

Si vous utilisez un champ d'instance statique que vous initialisez dans votre fichier cpp, vous pouvez obtenir plusieurs instances (et un comportement encore pire) si l'initialisation d'un élément statique/global tente d'obtenir une instance de votre singleton.En effet, l'ordre d'initialisation statique entre les unités de compilation n'est pas défini.

Autres conseils

L'héritage ne devrait pas être un problème tant que le cteur est privé.

Cependant, si vous n'interdisez pas le constructeur de copie, les utilisateurs peuvent copier [in]intentionnellement l'instance singleton.Héritage privé de boost :: non copiable est le moyen le plus simple d'éviter cela.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top