Начиная с C ++ 11, вы должны принимать его на величину больше, чем const & чаще, чем вы думаете.
Если вы используете std :: shared_ptr (а не базовый тип T), то вы делаете это, потому что хотите что-то с ним сделать.
Если вы хотите, чтобы скопировал его куда-нибудь, имеет смысл взять его копией и std :: переместить его внутренне, а не копировать с помощью const &, а затем позже скопировать. Это потому, что вы позволяете вызывающей опции в свою очередь вызывать std :: move shared_ptr при вызове вашей функции, тем самым сохраняя себе набор операций увеличения и уменьшения. Или нет. То есть, вызывающая функция может решить, нужен ли ему std :: shared_ptr после вызова функции, и в зависимости от того, перемещаться или нет. Это не достижимо, если вы проходите мимо const &, и поэтому желательно взять его по значению.
Конечно, если вызывающей стороне требуется дольше использовать свой shared_ptr (таким образом, он не может std :: переместить его), и вы не хотите создавать обычную копию в функции (скажем, вам нужен слабый указатель, или вы только иногда хочется скопировать его, в зависимости от каких-либо условий), тогда const & может быть предпочтительнее.
Например, вы должны сделать
void enqueue(std::shared<T> t) m_internal_queue.enqueue(std::move(t));
над
void enqueue(std::shared<T> const& t) m_internal_queue.enqueue(t);
Потому что в этом случае вы всегда создаете копию внутри