std::shared_ptr::operator=
Материал из cppreference.com
< cpp | memory | shared ptr
shared_ptr& operator=(const shared_ptr& r )noexcept; | (1) | |
template<class Y > shared_ptr& operator=(const shared_ptr<Y>& r )noexcept; | (2) | |
shared_ptr& operator=( shared_ptr&& r )noexcept; | (3) | |
template<class Y > shared_ptr& operator=( shared_ptr<Y>&& r )noexcept; | (4) | |
template<class Y > shared_ptr& operator=(std::auto_ptr<Y>&& r ); | (5) | (устарело в C++11) (удалено в C++17) |
template<class Y, class Deleter > shared_ptr& operator=(std::unique_ptr<Y,Deleter>&& r ); | (6) | |
Заменяет управляемый объект объектом, управляемым r.
Если *this уже владеет объектом и является последним владельцем shared_ptr
, а r не совпадает с *this, объект уничтожается с помощью собственного средства удаления.
1,2) Разделяет владение объектом, которым управляет r. Если r не управляет никаким объектом, *this также не управляет никаким объектом. Эквивалентно shared_ptr<T>(r).swap(*this).
3,4) Присваивает перемещением
shared_ptr
из r. После присваивания *this содержит копию предыдущего состояния r, а r пусто. Эквивалентно shared_ptr<T>(std::move(r)).swap(*this).5) Передаёт право собственности на объект, управляемый r, объекту *this. Если r не управляет никаким объектом, *this также не управляет никаким объектом. После присваивания *this содержит указатель, ранее удерживаемый r, и use_count()==1; r также пуст. Эквивалентно shared_ptr<T>(r).swap(*this).
6) Передаёт право собственности на объект, управляемый r, объекту *this. Средство удаления, связанное с r, сохраняется для будущего удаления управляемого объекта. r не управляет никаким объектом после вызова. Эквивалентно shared_ptr<T>(std::move(r)).swap(*this).
Содержание |
[править]Параметры
r | — | другой умный указатель для разделения права собственности или получения права владения |
[править]Возвращаемое значение
*this
[править]Примечание
Реализация может соответствовать требованиям без создания временного объекта shared_ptr
.
[править]Исключения
5,6) Может генерировать исключения, определённые реализацией.
[править]Пример
Этот раздел не завершён Причина: нет примера |
[править]Смотрите также
заменяет управляемый объект (public функция-элемент) |