Перейти к основному содержимому

Конструктор перемещения и оператор присваивания с перемещением

· 1 мин. чтения
Дмитрий Аладин
Преподаватель

В данной статье представлен пример использования конструктора перемещения и оператора присваивания с перемещением.

Статьи, объясняющие теорию:

  1. Конструктор перемещения | METANIT.COM
  2. Оператор присваивания с перемещением | METANIT.COM
  3. std::move | cppreference.com

Пример:

#include <iostream>
#include <utility>
using namespace std;

class A {
int value;

public:
A(int v = 0) : value{v} { cout << "A(" << value << ")" << endl; }
~A() { cout << "~A(" << value << ")" << endl; }
// Simple move constructor
A(A&& right) {
this->value = right.value;
right.value = 0;
cout << "A&&(" << value << ")" << endl;
}
// Simple move assignment operator
A& operator=(A&& right) {
this->value = right.value;
right.value = 0;
cout << "operator=(&&" << value << ")" << endl;
return *this;
}
A& operator=(A& right) {
this->value = right.value;
cout << "operator=(&" << value << ")" << endl;
return *this;
}
};

int main(int, char**) {
A a1(1); // A(1)
A temp(-1); // A(-1)
temp = std::move(a1); // operator=(&&1)
A a2(2); // A(2)
A a3(std::move(a2)); // A&&(2)
temp = a3; // operator=(&2)
// ~A(2)
// ~A(0)
// ~A(2)
// ~A(0)
}