В C ++, как правило, плохая идея выбирать, передавать ли по значению или по ссылке в зависимости от размера объекта.
Отчасти потому, что компилятор часто выполняет удаление копии при передаче по значению, отрицаяСтоимость копирования значения, но в основном потому, что эти два параметра часто ведут себя по-разному .
Так что выберите параметр, который из числа лучших показывает, что вам нужно сделать.
С помощью shared_ptr
, вся причина его существования в том, что он может быть скопирован, так что несколько объектов могут совместно владеть указанным объектом.Если вы никогда не передадите shared_ptr
по значению, вы можете задуматься, почему это shared_ptr
вообще.scoped_ptr
может быть более эффективным решением, чем тогда.
Очевидно, это не значит, что вы должны всегда передавать shared_ptr
по значению.Именно эта передача по значению является распространенным случаем для них.
Если вам нужно, чтобы вызывающий и вызываемый лица имели совместное владение, передавайте по значению.Если вы не хотите, чтобы вызываемый пользователь принял какое-либо право собственности, перейдите по ссылке.