В оптимизированной сборке без поддержки отладки не должно быть никаких накладных расходов.Вы можете узнать это, взглянув на реализацию, которую вы используете.Скорее всего, перегрузка operator->
просто возвращает указатель на объект, на который указывает указатель, а перегрузка operator*
просто разыменовывает этот указатель.
(Вот что делает реализация std::shared_ptr
в Visual C ++ 2010:каждый из этих перегруженных операторов просто вызывает функцию «get», которая просто возвращает указатель; блокировка или другие издержки отсутствуют. Другие реализации могут отличаться.)
Неоптимизированная сборка может не включать операторПерегрузка, и если ваша реализация имеет дополнительную поддержку отладки, которую вы включаете, она может выполнять дополнительные проверки (например, возможно, утверждение, если вы разыменовываете нулевой указатель).