Действительно ли scoped_ptr <> и auto_ptr <> устарели?
auto_ptr
устарела в C ++ 11, так что ваш ответ. scoped_ptr
не существует в C ++ 11 и никогда не существовало. Основной причиной использования boost::scoped_ptr
является обеспечение того, что право собственности никогда не передается (если, конечно, вы не обманываете). Опять же, если вы используете unique_ptr
, право собственности может быть передано, только если вы используете std::move
или аналогичные конструкции. Или, как указывает Говард, просто сделайте это const std::unique_ptr
.
Так что это действительно зависит от вас, хотите ли вы эту дополнительную часть страховки. Также boost::scoped_ptr
не имеет поддержки удаления. Так что unique_ptr
может играть трюки, которые boost::scoped_ptr
не может.
std :: weak_ptr <> экономно, только когда есть циклы, которые нужно прервать
Не могу сказать, что согласен с этой политикой обязательно. weak_ptr
следует использовать, когда объект может захотеть поговорить с чем-то другим, но он не владеет чем-то другим. Это означает, что он может быть удален в любое время, и владелец weak_ptr
должен иметь возможность обрабатывать это удаление всякий раз, когда он пытается с ним поговорить.
Количество циклов прерывания составляет один от использования weak_ptr
; это не должно быть единственным разом, когда это используется.