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;
}
3 Réponses :
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? P> blockQuote>
non. Une seule instance est créée. P>
Chaque fois que l'expression statique singleton instance; réalisé. N'est pas différent d'un exemple différent? P> blockQuote>
NO. P>
Je sais ce qu'est-ce que statique signifie p> blockQuote>
Evidemment, vous ne savez pas ce que vous pensez savoir. P>
Vous pouvez utiliser la ligne par ligne: Vous appelez ici la méthode statique 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 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 p> quelque chose comme p> encore meilleur si vous utilisez une variable statique comme un compteur juste à des fins de test. p> p> instance () code>, à l'intérieur de cette méthode que vous voyez la ligne p> < PRE> XXX PRE>
singleton code> et elle est renvoyée p>
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; }
Tout d'abord, N'incluez pas code>
. Et
à l'aide de l'espace de noms std; code> est mauvais a>.
Et je vous recommande d'obtenir Quelques bons livres Pour lire et en apprendre davantage sur ce que
statique code> 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 code> signifie, mais chaque fois que l'expression
Statique singleton instance; code> exécuté. N'est pas différent d'instance
code> créée?
@FIZZBUZZ NO, on dirait que vous ne comprenez pas parfaitement whttat
statique code> signifie :) "... sont initialisés Le premier contrôle passe à travers leur déclaration [...] sur tous les autres appels , la déclaration est ignorée. " I>