Я читал довольно много дискуссий о проблемах с производительностью, когда в приложении задействованы интеллектуальные указатели. Одной из частых рекомендаций является передача умного указателя как const & вместо копии, например:
void doSomething(std::shared_ptr<T> o) {}
против
void doSomething(const std::shared_ptr<T> &o) {}
Однако, разве второй вариант фактически не побеждает цель общего указателя? Мы на самом деле разделяем общий указатель здесь, поэтому, если по каким-то причинам указатель освобождается в вызывающем коде (подумайте о повторном включении или побочных эффектах), указатель const станет недействительным. Ситуация, которую должен предотвратить общий указатель. Я понимаю, что const & экономит некоторое время, так как нет копирования и блокировки для управления счетом. Но цена делает код менее безопасным, верно?