Подведение итогов комментариев:
«Это очень опасно» относится к случаю, когда конструктор копирования std::auto_ptr<>
(который передает владение) принял константный ссылочный аргумент - это полныйнарушение const-правильности .
«Менее опасный» относится к тому факту, что конструктор копирования (который теперь принимает неконстантную ссылку) может вообще передать право собственности;это все еще опасно, просто не , как опасно, как тогда, когда конструктор копирования получил константную ссылку.
Этот аспект std::auto_ptr<>
повсеместно считается недостатком в классе, посколькуэто вообще считается необычно сломанным.Следовательно, boost::scoped_ptr<>
и boost::shared_ptr<>
в значительной степени считаются «настоящими» умными указателями в C ++ 03 и в C ++ 11 * 1023.* полностью устарела в пользу std::unique_ptr<>
(и полностью удалена в C ++ 17).
Обновление: Начиная с Boost 1.57,Библиотека Boost.Move теперь предоставляет эмуляцию C ++ 03 std::unique_ptr<>
, которую следует использовать вместо boost::scoped_ptr<>
: boost::movelib::unique_ptr<>
.