LINUX.ORG.RU

Re: С++.Передача объектов по значению.

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

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

asgard ()

Re: С++.Передача объектов по значению.

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

tailgunner ★★★★★ ()

Re: С++.Передача объектов по значению.

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

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

anonymous ()
Ответ на: Re: С++.Передача объектов по значению. от anonymous

Re: С++.Передача объектов по значению.

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

dilmah ★★★★★ ()
Ответ на: Re: С++.Передача объектов по значению. от dilmah

Re: С++.Передача объектов по значению.

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

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

anonymous ()
Ответ на: Re: С++.Передача объектов по значению. от anonymous

Re: С++.Передача объектов по значению.

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

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

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

aton ()
Ответ на: Re: С++.Передача объектов по значению. от aton

Re: С++.Передача объектов по значению.

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

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

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