Используя Копировать и своп, мы с легкостью реализуем назначение копирования с надежной безопасностью:
T& operator = (T other){
using std::swap;
swap(*this, other);
return *this;
}
Однако для этого требуется T
быть Swappable. Какой тип автоматически, если std::is_move_constructible_v<T> && std::is_move_assignable_v<T> == true
благодаря std::swap
.
Мой вопрос в том, есть ли недостаток в использовании идиомы "Копировать и перемещать" вместо этого? Например:
T& operator = (T other){
*this = std::move(other);
return *this;
}
при условии, что вы выполняете move-assign для T
, потому что, очевидно, вы в конечном итоге получаете бесконечную рекурсию.
Этот вопрос отличается от Если Idiom Copy-and-Swap станет Idiom Copy-and-Move в С++ 11?, поскольку этот вопрос более общий и использует оператор присваивания перемещения вместо фактического перемещения элементов вручную. Это позволяет избежать проблем с очисткой, которые предсказывали ответ в связанной теме.