2016-07-22 3 views
1

Скажем, у меня есть следующий проход по ссылке:Проходит по ссылке (вектор указателей на объект) быстрее, чем проходит по значению?

foo(std::vector<someClass *> const &bar)

сравнивающий передавать по значению

foo(std::vector<someClass *> bar)

Я читал, что когда речь идет о примитивных типов данных, используя проход по значению будет предпочтительнее, тогда как передается по ссылке для больших данных, таких как класс или структура. Так как насчет вектор указателей на объекты?

+0

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

ответ

3

Это просто о количестве байтов, которые необходимо скопировать.

Когда вы передаете int, между его размером и размером указателя нет большой разницы (если есть). Поскольку значение, как правило, уже находится в регистре, оно немного быстрее.

Если вы передаете большую структуру или массив, копирование содержимого (по значению) занимает больше времени, чем копирование его указателя (для-ref).

Вектор указателей на объекты снова может быть много байтов, поэтому ссылка выполняется быстрее.

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