I was playing with PVS-Studio static analysis tool recently, and it suggested me to replace passing of const std::shared_ptr<type> arg to const std::shared_ptr<type>& arg.

I perfectly understand that it is a good way to optimize performance as when I pass shared_ptrs by value there are increments / decrements of reference counters which are interlocked operations.

So the question is - is there any reason I should not do such optimization? Is there any corner case I did not consider?

I'm now trying to see it is makes sense to optimize this way one heavily-used interface, so would appreciate comments.