Ответ 1
В теории вы должны использовать unique_ptr
для всех указателей, если не знаете, что хотите поделиться им, и в этом случае вы должны использовать shared_ptr
. Причина в том, что unique_ptr
имеет меньше накладных расходов, поскольку не учитывает ссылки.
Однако a unique_ptr
является подвижным, но не копируемым, поэтому использование одного в качестве переменной-члена может потребовать, чтобы вы написали больше кода (например, конструктор перемещения), передав один по значению, вы должны использовать std::move
и так далее. В результате некоторые люди используют shared_ptr
из лени, потому что это просто проще, и разница в перформансе может быть не существенной для их приложения.
Наконец, необработанный указатель подходит для наблюдения - использование указателей, которое никогда не может повлиять на продолжительность жизни. Тщательный выбор правильного типа указателя может дать тем, кто читает ваш код, хорошее понимание того, что вы делаете. Более подробно см. Эссе Херба Саттера Элементы стиля С++, в частности раздел "no delete".