Пространства имён
Варианты
Действия

std::unique_ptr::operator=

Материал из cppreference.com
< cpp‎ | memory‎ | unique ptr

 
 
 
 
 
unique_ptr& operator=( unique_ptr&& r );
(1) (начиная с C++11)
template< class U, class E >
unique_ptr& operator=( unique_ptr<U,E>&& r );
(1) (начиная с C++11)
unique_ptr& operator=( nullptr_t );
(2) (начиная с C++11)
1)
Трансферы собственности на объект, на который указывает r в *this как при вызове reset(r.release()) следуют задание от std::forward<E>(r.get_deleter()).
Оригинал:
Transfers ownership of the object pointed to by r to *this as if by calling reset(r.release()) followed by an assignment from std::forward<E>(r.get_deleter()).
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
2)
Эффективно же, как вызов reset().
Оригинал:
Effectively the same as calling reset().
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Обратите внимание, что оператор присваивания unique_ptr лишь принимает XValues, которые обычно генерируются std::move. (unique_ptr класс явно удаляет свой именующее конструктор копирования и оператор именующее назначения.)
Оригинал:
Note that unique_ptr's assignment operator only accepts XValues, which are typically generated by std::move. (The unique_ptr class explicitly deletes its именующее copy constructor and именующее assignment operator.)
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

Содержание

[править] Параметры

r -
смарт-указатель, из которых собственность будет передана
Оригинал:
smart pointer from which ownership will be transfered
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Возвращаемое значение

*this

[править] Исключения

noexcept-спецификация:  
noexcept
  (начиная с C++11)

[править] Пример

#include <iostream>
#include <memory>
 
struct Foo {
    Foo() { std::cout << "Foo\n"; }
    ~Foo() { std::cout << "~Foo\n"; }
};
 
int main()
{
    std::unique_ptr<Foo> p1;
 
    {
        std::cout << "Creating new Foo...\n";
        std::unique_ptr<Foo> p2(new Foo);
 
        p1 = std::move(p2);
        std::cout << "About to leave inner block...\n";
 
        // Foo instance will continue to live,
        // despite p2 going out of scope
    }
 
    std::cout << "About to leave program...\n";
}

Вывод:

Creating new Foo...
Foo
About to leave inner block...
About to leave program...
~Foo