Если у меня есть функция, которая должна работать с 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. Мой вопрос был больше из чисто технического кода-точки зрения, если вы знаете, что я имею в виду.