Ответ 1
Ссылка на указатель - это именно то, что он говорит, ссылка на указатель.
Посмотрите, что мы знаем о ссылках. Ссылка в С++ - это переменная, которая ссылается на существующую переменную в другом месте:
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), и нет смысла передавать указатели по ссылке (передать по ссылке не более эффективно, чем передавать по значению для небольших объектов, таких как указатели и целые числа). Я бы не хотел догадываться, почему это было сделано в вашем случае.