Я недавно видел пример неполного синглтон-кода класса в учебнике по C ++, и я не могу объяснить, почему он работает.
#include <iostream>
class Singleton
{
private:
static Singleton* s_Instance;
public:
static Singleton& Get()
{
// I put this check to see if it really is nullptr
if (s_Instance == nullptr)
std::cout << "nullptr" << std::endl;
return *s_Instance;
}
void Hello()
{
std::cout << "Hello" << std::endl;
}
};
Singleton* Singleton::s_Instance = nullptr;
int main()
{
Singleton::Get().Hello();
}
Теперь это, очевидно, не настоящий синглтон, но это не главное.
Я не могу понять, почему возвращение значения указателя, установленного на nullptr
, возвращает экземпляр класса и почему можно получить значение nullptr
. Или что-то еще происходит, что я скучаю?