2017-02-11 2 views
0

Недавно я посмотрел на код, а кто-то использовал это:Создание ссылки на разыменованный указатель?

void Foo(vector<vector<int>>* arr_ptr){ 
vector<vector<int>>& arr = *arr_ptr; 
//use arr 
} 

Есть ли цель создать ссылку на разыменованного указатель? До тех пор пока указатель не равно нулю, не может такой же результат будет выполняться, используя только это:

void Foo(vector<vector<int>>& arr) { 
//use arr 
} 
+0

Действительно, похоже, что они должны изменить функцию, чтобы просто взять ссылку. Но может быть, есть и другие ограничения дизайна (возможно, это виртуальная функция?), Или устаревшая привычка, или просто небрежность. – TheUndeadFish

+0

@ TheUndeadFish: Или он должен быть таким образом, чтобы взаимодействовать с другим кодом не под контролем автора («устаревшая привычка» минус «привычка»). –

+2

@ TheUndeadFish: Поддержание целостности интерфейса вашего кода вряд ли «неряшливо». –

ответ

4

Это не было бы то же самое с кодом вызывающего этот метод.

В исходном коде аргумент будет указателем на тип X; в вашей версии он будет иметь тип X.

+0

Возможно короткое объяснение. –

+0

Если я инициализирую вектор > и вызываю этот код, используя первый способ, а затем второй способ, не будет ли результат одинаковым? Разница только в том, как я это называю? – shawtynerd

+0

@shawtynerd Да. Исключение составляет если Foo поделил указатель на другую часть вашего приложения. –

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