lightalex
@lightalex

В чем отличие *& от * в C++?

Доброго времени суток
void test(Book* obj) {
	obj->a = 2;
	std::cout << obj->a;
}
Book *book = new Book();
test(book);

void test(Book*& obj) {
	obj->a = 2;
	std::cout << obj->a;
}
Book *book = new Book();
test(book);

В чем отличие *& от * в данных случаях?
  • Вопрос задан
  • 10953 просмотра
Решения вопроса 1
Первое это указатель * на Book.
Второе это ссылка & на указатель * на Book.

А значит поменяв во втором случае содержимое указателя вы фактически поменяете содержимое указателя в вызвовшем эту функцию коде - указатель book.

Но конкретно в этом примере указатель не меняется. А значит и разницы нет.

Есть ещё один эффект. Когда код вне этой функции поменяет указатель book (например другой поток это сделает), то эта функция может сразу увидеть изменения. Но есть тонкости с кэшированием и volatile.

UPD: разница все же есть. В варианте со ссылкой присутствует дополнительный уровень косвенной адресации. А значит он капельку медленнее.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы