Ссылка на указатель - это именно то, что он говорит, ссылка на указатель.
Рассмотрите то, что мы знаем о ссылках. Ссылка на C++ является переменной, которая относится к существующей переменной в другом месте:
int x = 1;
int &y = x; // <-- y refers to x. Any changes to y will update x as well, and vice versa.
Также рассмотрите то, что мы знаем о указателях. Указатель указывает на другой объект в памяти:
int *m = new int(5); // Pointer to an allocated integer in memory.
int *n = m; // Pointer to the same memory.
Так что в вашем случае то, что вы на самом деле имеете, является ссылкой на указатель!
int *m = new int(5); // Pointer to an allocated integer in memory.
int *ptr = m; // Pointer to m.
int *&ptrRef = ptr; // Reference to ptr.
В приведенном выше примере, изменение ptrRef обновит указатель, но не значение.
Вот немного более полного примера:
int *myPtr = new int(5); // myPtr points to an integer.
...
void ChangePointer(int *&ptr)
{
delete ptr;
ptr = new int(6);
}
...
std::cout << *myPtr << std::endl; // <-- Output "5"
ChangePointer(myPtr);
std::cout << *myPtr << std::endl; // <-- Output "6"
В приведенном выше примере мы передаем myPtr
к ChangePointer
посредством ссылки, так что он может быть изменен с помощью функции. Если мы не пройдем по ссылке, любые изменения, сделанные внутри функции, будут потеряны.
В вашем случае вы передаете ссылку на указатель const. Это примерно эквивалентно:
DoStuff(const Object &myObject);
В вашем случае, вы передаете указатель, а не объект, хотя.
Кажется немного лишним, чтобы передать указатель const по ссылке. Указатель не может быть изменен (это const), и нет смысла передавать указатели по ссылке (передать по ссылке не более эффективно, чем передавать по значению для небольших объектов, таких как указатели и целые числа). Я бы не хотел догадываться, почему это было сделано в вашем случае.
Это как 'f (const T &)', где 'T = const char *'. –
'const' определяет тип, который изменяет объект, становится плохо сформированным. Сообщения об ошибках, которые вы получаете в каждом случае, должны объяснять, что происходит. – user2079303
Обратите внимание, что это не указатель на ссылку, поскольку заголовок говорит (нет такой вещи), но ссылка на указатель. –