Разыменование умных указателей обычно тривиально, безусловно, для повышения в режиме релиза. Все проверки ускорения выполняются во время компиляции. (Умные указатели теоретически могут делать умные вещи между потоками). Это все еще оставляет много других операций. Никола упомянул строительство, копирование и уничтожение. Это не полный набор, хотя. Другими важными операциями являются обмен, назначение и сброс в NULL. В основном любая операция, требующая смекалки.
Обратите внимание, что некоторые из этих операций исключаются некоторыми умными указателями. Например. boost::scoped_ptr
даже нельзя скопировать, не говоря уже о назначении. Так как это оставляет меньше операций, реализация может быть оптимизирована для этих меньшего количества методов.
На самом деле, с появлением TR1, вполне вероятно, что компиляторы могут лучше работать с умными указателями, чем с необработанными указателями. Например. вполне возможно, что компилятор может доказать, что в некоторых ситуациях интеллектуальный не копируемый указатель не имеет псевдонима просто потому, что он не копируется. Подумайте об этом: создание псевдонимов происходит, когда создаются два указателя, указывающие на один и тот же объект. Если первый указатель не может быть скопирован, как второй указатель в конечном итоге будет указывать на тот же объект? (Есть и способы обойти это тоже - оператор * должен вернуть lvalue)