std::auto_ptr<T>::operator=
auto_ptr& operator=( auto_ptr& r ) throw(); |
(1) | (устарело в C++11) (удалено в C++17) |
template< class Y > auto_ptr& operator=( auto_ptr<Y>& r ) throw(); |
(2) | (устарело в C++11) (удалено в C++17) |
auto_ptr& operator=( auto_ptr_ref<T> m ) throw(); |
(3) | (устарело в C++11) (удалено в C++17) |
Заменяет управляемый объект объектом, управляемым r или m.
reset(r.release()).reset(r.release()). Y* должен быть неявно преобразован в T*.reset(m.release()). auto_ptr_ref это тип, определяемый реализацией, который содержит ссылку на auto_ptr. std::auto_ptr неявно преобразуется в и из этого типа. В реализации разрешено давать шаблону другое имя или реализовывать эквивалентную функциональность другими способами.Параметры
| r | — | другой auto_ptr из которого передать право владения объектом
|
| m | — | объект типа, определяемого реализацией, который содержит ссылку на auto_ptr
|
Возвращаемое значение
*this.
Примечание
Конструктор и оператор присваивания копированием из auto_ptr_ref позволяют создавать копии и присваивать std::auto_ptr из безымянных временных объектов. Поскольку его конструктор копирования и оператор присваивания копированием принимают аргумент как неконстантную ссылку, они не могут напрямую связывать аргументы rvalue. Однако может быть выполнено пользовательское преобразование (которое освобождает исходный auto_ptr), за которым следует вызов конструктора или оператора присваивания копированием, которые принимают auto_ptr_ref по значению. Это ранняя реализация семантики перемещения.
Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| LWG 127 | C++98 | auto_ptr нельзя было присвоить из auto_ptr_ref
|
добавлена перегрузка (3) |