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