LINUX.ORG.RU

> в каких случаях есть резон передавать объекты по значению функциям

я пока что никаких резонных причин для этого не обнаруживал. есть ссылки, их и используем, ибо избегаем избыточного копирования и косяков при оном.

asgard
()

Если сомневаешься - передавай по ссылке (вщзможно, const).

tailgunner ★★★★★
()

Похоже, смысла особого в этом действительно нет за исключением по крайней мере одного случая - если копирующий конструктор объекта модифицирует свой аргумент. Это редко бывает, обычно копирующие конструкторы имеют сигнатуру A::A(const A&), но исключения вида A::A(A&) бывают.

Ну вот к примеру - если взять boost::shared_ptr. Передавать его в функцию как const& - не годится, поскольку при копировании он должен увеличить счетчик ссылок.

anonymous
()
Ответ на: комментарий от anonymous

ну если объект не больше 8-16 байт и у него тривиальный конструктор коирования, то передать по значению будет скорее вскего эффективнее, потому что по ссылке -- будет доступ с косвенной адресацией

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

>у если объект не больше 8-16 байт и у него тривиальный конструктор коирования, то передать по значению будет скорее вскего эффективнее, потому что по ссылке -- будет доступ с косвенной адресацией

и что при разработке програмных комплексов руководствуются таким правилом?

anonymous
()
Ответ на: комментарий от anonymous

РуководствуютсяЮ особенно если много раз и это основное, что делает программа.

yz
()
Ответ на: комментарий от anonymous

> shared_ptr... Передавать его в функцию как const& - не годится, 
> поскольку при копировании он должен увеличить счетчик ссылок.

В передаче shared_ptr по ссылке нет ничего криминального,
да копирование не происходит, но может оно и не требуется. В данном
случае shared_ptr надо рассматривать как некоторые абстрактный 
пользовательский тип, для которого справедливы следующие принципы:

- Если объект никогда не изменяется, то передовать его надо по
константной ссылке;
- Если объект изменяется, то объект передается по ссылке;
- Если требуется копия объекта, то передовать надо по значению.

aton
()
Ответ на: комментарий от aton

> В передаче shared_ptr по ссылке нет ничего криминального,
> да копирование не происходит, но может оно и не требуется.
Я бы сказал
"... да копирования не происходит, но оно здесь лишено смысла."

А анонимус написал бессмыслицу.

gpg
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.