Оператор присваивания перемещения - Википедия - Move assignment operator
в Язык программирования C ++, то оператор присваивания перемещения =
используется для передачи временного объекта существующему объекту. Оператор присваивания перемещения, как и большинство операторов C ++, может быть перегружен. Словно оператор присваивания копий это специальная функция-член.
Если оператор присваивания перемещения не определен явно, компилятор генерирует неявный оператор присваивания перемещения (C ++ 11 и новее) при условии, что копировать /переместить конструкторы, оператор присваивания копий или же деструкторы не были заявлены.[1] Параметр оператора присваивания перемещения - это ссылка rvalue (T &&) набрать Т, куда Т - объект, определяющий оператор присваивания перемещения. Оператор присваивания перемещения отличается от оператора переместить конструктор потому что оператор присваивания перемещения вызывается для существующего объекта, а конструктор перемещения вызывается для объекта, созданного операцией. После этого данные другого объекта больше не действительны.
Перегрузка оператора присваивания перемещения
Чтобы перегрузить оператор присваивания перемещения, подпись функции должна быть:[1]
Т& оператор=(Т&& данные)
Чтобы успешно перегрузить оператор присваивания перемещения, должны быть выполнены следующие условия:
- Убедитесь, что объект, вызывающий оператора, не вызывает оператора на самом себе.
- Распределение данных текущего объекта отменяется.
- Данные перемещаемого объекта должны быть помечены как nullptr (или что-то, чтобы обозначить движение)
- Оператор должен вернуть ссылку на «* this».
Рассмотрим следующий оператор присваивания перемещения для простого строкового класса:[2]
учебный класс Нить { общественный: Нить& оператор=(Нить&& Другой) нет кроме { // Если мы не пытаемся переместить объект в себя ... если (это != &Другой) { Удалить[] это->данные_; // Удаляем исходные данные строки. это->данные_ = Другой.данные_; // Копируем данные другой строки в эту строку. Другой.данные_ = nullptr; // Наконец, сбрасываем указатель данных другой строки. } возвращаться *это; } частный: char* данные_;};
Рекомендации
- ^ а б «Переместить оператор присваивания - cppreference.com». en.cppreference.com. Получено 2016-02-23.
- ^ «Конструкторы перемещения и операторы присваивания перемещения (C ++)». msdn.microsoft.com. Получено 2016-02-23.
Этот компьютерное программирование -связанная статья является заглушка. Вы можете помочь Википедии расширяя это. |