Что за амперсанд в конструкторе класса (&) с 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 шт):
Познакомьтесь с классическим синглтоном Майерса.
Эта штука работает так - при первом обращении к static MyHook& Instance() будет создан синглтон. При этом, C++11 дополнительно гарантирует, что это будет сделано потокобезопасным образом.
Все последующие вызовы метода будут возвращать ранее созданный объект.
Для полной классичности, не хватает удаления конструктора копирования, конструктора присваивания, а также прикрытия обычного конструктора в private
Тогда класс невозможно будет ни создать, ни скопировать, что и будет гарантировать существование единственного экземпляра этого класса в программе.