Есть еще много случаев, когда ссылка на интеллектуальный указатель - хорошая идея. Очевидным примером является метод присваивания класса интеллектуального указателя, который принимает ссылку другому интеллектуальному указателю в качестве его параметра.
Создание метода, который принимает ссылку на интеллектуальный указатель, означает, что этот параметр не увеличивает счетчик внутренних ссылок интеллектуального указателя. Это может повысить производительность - но, вероятно, не так много. Кроме того, есть много вещей, которые метод не может сделать со ссылкой - или оригинальным умным указателем. Если вы знаете, что это такое и избегают их, то переключение по ссылке работает просто отлично. Разумеется, цель умных указателей - не знать об этих вещах.
Кроме того, если у вас есть способ, который будет изменить значение параметра умного указателя, передавая его как ссылку, как и для любого другого типа.
Это та же самая причина, по которой хранение ссылок на другие типы объектов является плохим, объект может быть уничтожен, и у вас будет обвисшая ссылка. Умные указатели должны удерживать объект, который они указывают на живые, но мы не говорим об объекте с указателем на объект, мы говорим о самом объекте интеллектуального указателя. – bames53 2011-10-26 16:59:25
См. Http://stackoverflow.com/questions/327573/c-passing-references-to-boostshared-ptr – 2014-09-18 17:33:02