Нет, это правильно, как написано. Компилятор создаст и вернет ссылку на instance
по функции getInstance
.
Вы спрашиваете, должно ли оно быть instance&
. Прежде всего, это не является синтаксически действительным. А как насчет &instance
? Это займет адрес instance
и поэтому возвратит instance *
.
Множество применений оператора &
являются общим источником путаницы. Вот быстрый «чит-лист», который не использует сложную терминологию из стандарта:
Бинарная (два аргумента) версия &
применяется к двум экземплярам переменных и представляет побитовое И (за исключением случаев перегрузки).
unsigned int a = 7;
unsigned int b = 3;
unsigned int c = a & b; // c = 3
Унарная (один аргумент) версия &
при применении к типу обозначает ссылку на тип. Пример:
int a = 7;
int& ref_a = a; // ref_a is a reference to a
Унарный (один аргумент) версия &
при применении к переменной обозначает оператор address-of
и дает указатель на переменную.
int a = 7;
int* ptr_a = &a;