J'ai récemment travaillé avec le code qui ressemble à ceci:plusieurs instances de statique Singleton
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 << "Match\n";
} else {
cout << "No Match " << singleton1.val << " - " << singleton2.val << "\n";
}
}
int main() {
Singleton singleton = Singleton::getInstance();
singleton.val = 2;
Test t(singleton);
}
Chaque fois que je le lance, je reçois « Pas de match ». Pourtant, j'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 par GDB, il y a deux instances du Singleton. Pourquoi est-ce?
En fait, le constructeur de copie est appelé ici, donc vous devrez le réparer aussi. –
BillyONeal a raison, vous devez également masquer le constructeur de copie. –