2013-03-22 4 views
0

Я читаю следующий вопрос Towers of Hanoi question. Первый ответ:Ссылка Проход

stack<int>& 

Мой вопрос: почему это ?. Что произошло в памяти?

+2

Вы спрашиваете, что такое ссылка? Это должно быть объяснено вашей книгой на C++. –

+0

Если вы не пройдете по ссылке, то она сделает копию контейнера, которая не предназначена для изменения фактической переменной. –

+0

Ссылка технически - только указатель. Чтение RAII и указателей. – Paranaix

ответ

1

Мы передаем ссылку, чтобы копия объекта stack не производилась. Если копия была сделана, ее изменение не повлияет на исходный объект stack, переданный функции. Это повлияет только на копию , которая является локальной для функции.

Ссылка похожа на псевдоним объекта; когда объявлено как

stack<int>& source 

source теперь относится к этому объекту.

1

Функция используется в упомянутом вопросе имел следующий прототип:

void Hanoi(int nDisks, stack<int> source, stack<int> intermed, stack<int> dest) 

т.е. он принимает все передаваемые stack<int> объектов по значению. Создается копия прошедшего stack, и любые изменения, внесенные этому объекту в тело этой функции, изменяют копию, а не исходный объект, который был передан ей.

Именно поэтому решение состояло в том, чтобы передать эти объекты stack по ссылке вместо передачи по значению. В основном ссылки (такие как stack<int>& dest) позволяют рассматривать dest внутри функции Hanoi так же, как ее тип будет stack<int>, там просто нет копирования и изменения видны вызывающему абоненту :)

Смежные вопросы