Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpOpMvMA 124 of 150 menu
◀ ▶

Оператор перемещения в C++

Оператор присваивания перемещением обновляет уже существующий объект.

Сначала он освобождает старый буфер левой стороны, затем забирает указатель из правой и обнуляет источник.

Проверка if (this != &other) нужна и для перемещения: при самоприсваивании нельзя удалить буфер, который еще предстоит украсть.

Запишем Box с деструктором, конструктором перемещения и оператором operator=(Box&&):

class Box { public: int* ptr; Box() { ptr = new int[1]; ptr[0] = 0; } Box(Box&& other) noexcept { ptr = other.ptr; other.ptr = nullptr; } Box& operator=(Box&& other) noexcept { if (this != &other) { delete[] ptr; ptr = other.ptr; other.ptr = nullptr; } return *this; } ~Box() { delete[] ptr; } };

Сейчас создадим два объекта и переместим один в другой:

int main() { Box left; Box right; right.ptr[0] = 17; left = std::move(right); std::cout << left.ptr[0] << "\n"; std::cout << (right.ptr == nullptr) << "\n"; return 0; }

Реализуйте оператор присваивания перемещением для Tile с буфером из одного int. Присвойте правый объект левому через функцию move и выведите число из буфера левого объекта и 1, если указатель справа обнулился.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить