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