/ / Instances multiples de singleton statique - c ++, singleton

Plusieurs instances de singleton statique - c ++, singleton

J'ai récemment travaillé avec du code qui ressemble à ceci:

using namespace std;

class Singleton {
public:
static Singleton& getInstance();
int val;
};

Singleton &Singleton::getInstance() {
static Singleton s;
return s;
}

class Test {
public:
Test(Singleton &singleton1);
};

Test::Test(Singleton &singleton1) {
Singleton singleton2 = Singleton::getInstance();
singleton2.val = 1;
if(singleton1.val == singleton2.val) {
cout << "Matchn";
} else {
cout << "No Match " << singleton1.val << " - " << singleton2.val << "n";
}
}

int main() {
Singleton singleton = Singleton::getInstance();
singleton.val = 2;
Test t(singleton);
}

A chaque fois que je le lance, je reçois "No Match". Pourtant, je m'attends à une correspondance car il ne devrait y avoir qu'une seule instance de la classe. D'après ce que je peux dire en passant à GDB, il existe deux instances du Singleton. Pourquoi est-ce?

Réponses:

4 pour la réponse № 1

La première ligne de test ::Test crée une autre instance de Singleton (votre pile locale n’est pas une référence). Vous pouvez éviter cela en définissant le constructeur par défaut sur Singleton et en le rendant privé. À l’heure actuelle, tout le monde peut créer une instance de Singleton.