Я недавно работал с кодом, который выглядит следующим образом:Несколько экземпляров статических 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);
}
Каждый раз, когда я запускаю его я получаю сообщение «No Match». Тем не менее, я ожидаю матча, так как должен быть только один экземпляр класса. Из того, что я могу сказать, когда переходить через GDB, есть два экземпляра Singleton. Почему это?
На самом деле здесь вызывается конструктор копирования, поэтому вам также придется исправить это. –
BillyONeal прав, вам также нужно скрыть конструктор копирования. –