2013-03-04 4 views
0

Hello Stack Overflow. J'étudie pour un examen de CS que j'ai demain et je regarde la feuille de revue que notre professeur a fournie pour nous. L'un des points dit de savoir pourquoi Singleton est un meilleur choix que Global.Pourquoi Singleton est un meilleur choix que Global Objects

Je ne suis pas exactement sûr du raisonnement, mais je me souviens de lui dire quelque chose à propos de Singleton en utilisant moins de "pollution de l'espace de noms". J'ai fait plusieurs recherches Google comparant Singleton et Global, mais à peu près tous les résultats ont indiqué que les deux sont de mauvaises options lol. Donc ça ne m'a plus que confus.

Si quelqu'un peut m'aider à éclaircir cela, il sera grandement apprécié. Merci!

+4

Beurk, singletons. – chris

+3

Singletons * sont * des objets globaux cependant. C'est comme demander pourquoi les méthodes sont un meilleur choix que les fonctions membres. – Pubby

+1

Eh bien, il y a le [statique fiasco d'initialisation de commande] (http://www.parashift.com/c++-faq/static-init-order.html) qui est un downer, mais aucun n'est excellent. –

Répondre

1

Ils sont paresseux construits:

LargeObject global;     // Large object is always constructed. 

class LargeObject_Singelton 
{ 
    public: static LargeObject& getInstance() 
    { 
     static LargeObject instance;  // This object is not created until the first 
     return instance;     // time getInstance() is called. 
    }          // If you never use it this can be important. 
}; 
+2

Hmm. Pouvez-vous expliquer un peu plus en profondeur s'il vous plaît? – ModdedLife

+1

Peut être paresseux construit. La construction paresseuse est en fait un problème si plus d'un thread peut y accéder (puisque vous avez besoin d'un autre objet global pour verrouiller le premier appel à l'instance). –

+0

@ john.pavan: Pas vrai en C++ 11 et en C++ 03 gcc ce n'était pas un problème. En C++ 03 dans DevStuio certains travaux, mais pas un problème majeur: http://stackoverflow.com/a/449823/14065 –

Questions connexes