Várias instâncias de singleton estático
Pergunta
Eu tenho trabalhado recentemente com código que se parece com o seguinte:
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);
}
Toda vez que eu o corro, recebo "No Match". No entanto, estou esperando uma partida, pois deve haver apenas uma instância da classe. Pelo que posso dizer ao passar com o GDB, é que há duas instâncias do Singleton. Por que é isso?
Solução
A primeira linha de teste :: teste cria outra instância de Singleton (na pilha, seu local não é uma referência). Você pode impedir isso definindo o construtor padrão em Singleton e tornando -o privado. Como está, qualquer um pode criar uma instância de Singleton.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow