0
votes

Comment comprendre Singleton en C ++?

S'il vous plaît dites-moi pourquoi le code singleton ci-dessous fonctionne? Chaque fois que singleton :: Instance () code> est appelé, une instance sera créée, de sorte que deux instance sont censées être créées dans le code suivant?

#include <bits/stdc++.h>

using namespace std;

class Singleton
{
    private:
       Singleton() = default;

    public:
       static Singleton& instance()
       {
          static Singleton INSTANCE;
          return INSTANCE;
       }
};

int main()
{
    Singleton &s1 = Singleton::instance();
    Singleton &s2 = Singleton::instance();

    return 0;
}


6 commentaires

Tout d'abord, N'incluez pas . Et à l'aide de l'espace de noms std; est mauvais .


Et je vous recommande d'obtenir Quelques bons livres Pour lire et en apprendre davantage sur ce que statique fait.


Je ne sais pas pourquoi vous pensez qu'il y aurait deux instances créées. Savez-vous ce que statique fait dans ce contexte?


N'apprenez pas quelque chose ce que est considéré comme une mauvaise pratique .


Je sais ce que statique signifie, mais chaque fois que l'expression Statique singleton instance; exécuté. N'est pas différent d'instance créée?


@FIZZBUZZ NO, on dirait que vous ne comprenez pas parfaitement whttat statique signifie :) "... sont initialisés Le premier contrôle passe à travers leur déclaration [...] sur tous les autres appels , la déclaration est ignorée. "


3 Réponses :


0
votes

Chaque fois que Singleton :: Instance () est appelée, une instance sera créée, de sorte que deux instance sont censées être créées dans le code suivant?

non. Une seule instance est créée.

Chaque fois que l'expression statique singleton instance; réalisé. N'est pas différent d'un exemple différent?

NO.

Je sais ce qu'est-ce que statique signifie

Evidemment, vous ne savez pas ce que vous pensez savoir.


0 commentaires

2
votes

Vous pouvez utiliser la ligne par ligne: xxx

Vous appelez ici la méthode statique instance () , à l'intérieur de cette méthode que vous voyez la ligne < PRE> XXX

Le truc ici est de comprendre que les variables déclarées statiques à l'intérieur d'une méthode ne seront déclarées qu'une fois, peu importe le nombre de fois que vous appelez la méthode après. Donc, cela crée l'instance de singleton et elle est renvoyée xxx

Le deuxième appel sautera en réalité la délarparation de l'instance et retournera immédiatement. < / p>

Pour plus de clarification, vous pouvez mettre des messages significatifs dans le constructeur

quelque chose comme xxx

encore meilleur si vous utilisez une variable statique comme un compteur juste à des fins de test.


0 commentaires

3
votes

Vous devriez lire sur le statique code> mot-clé. Il peut avoir une signification différente et vous en avez deux:

   static Singleton& instance()
   // ^ ---------------------------- (1)
   {
      static Singleton INSTANCE;
      // ^ ------------------------- (2)
      return INSTANCE;
   }


0 commentaires