Если у меня есть функция, которая должна работать с shared_ptr, не было бы более эффективным передать ей ссылку на нее (чтобы избежать копирования объекта shared_ptr)?
Каковы возможные плохие побочные эффекты?
Я предполагаю два возможных случая:
1) внутри функции копируется из аргумента, как в
ClassA::take_copy_of_sp(boost::shared_ptr<foo> &sp)  
{  
     ...  
     m_sp_member=sp; //This will copy the object, incrementing refcount  
     ...  
}  
2) внутри функции используется только аргумент, например, в
Class::only_work_with_sp(boost::shared_ptr<foo> &sp) //Again, no copy here  
{    
    ...  
    sp->do_something();  
    ...  
}  
В обоих случаях я не вижу причин для передачи boost::shared_ptr<foo> по значению вместо ссылки. Передача по значению только "временно" увеличивает счетчик ссылок из-за копирования, а затем уменьшает его при выходе из области действия.
Я что-то пропускаю?
Просто, чтобы прояснить, прочитав несколько ответов: я полностью согласен с проблемами преждевременной оптимизации, и я всегда стараюсь использовать профили первого профиля, а затем-работать-на-hotspots. Мой вопрос был больше из чисто технического кода-точки зрения, если вы знаете, что я имею в виду.
