Что за амперсанд в конструкторе класса (&) с c++?

class MyHook{
public:
    
    static MyHook& Instance(){
        static MyHook myHook;
        return myHook;
    }   
    HHOOK hook; 
    void InstallHook(); 
    void UninstallHook();
    MSG msg; 
    int Messsages(); 
};
LRESULT WINAPI MyMouseCallback(int nCode, WPARAM wParam, LPARAM lParam); //callback declaration

Я не понимаю что это за синтаксис такой :

static MyHook& Instance(){
        static MyHook myHook;
        return myHook;
    }   

Что значит статический конструктор,и зачем этот амперсанд '&',почему в конструкторе создается опять класс и куда он возвращается?...


Ответы (1 шт):

Автор решения: gbg

Познакомьтесь с классическим синглтоном Майерса.

Эта штука работает так - при первом обращении к static MyHook& Instance() будет создан синглтон. При этом, C++11 дополнительно гарантирует, что это будет сделано потокобезопасным образом.

Все последующие вызовы метода будут возвращать ранее созданный объект.

Для полной классичности, не хватает удаления конструктора копирования, конструктора присваивания, а также прикрытия обычного конструктора в private

Тогда класс невозможно будет ни создать, ни скопировать, что и будет гарантировать существование единственного экземпляра этого класса в программе.

→ Ссылка