std::move
called on an unmovable typestd::move
используемый на типе класса без конструктора перемещения или оператора присваивания перемещения
Этот дефект происходит, когда вы используете std::move
перемещать объект типа класса, который не имеет конструктора перемещения или перемещает оператор присваивания.
Использование std::move
в операторах, таких как:
Obj objTo {std::move(objFrom)}; objTo = std::move(objFrom);
Если класс является дорогим, чтобы скопировать, непреднамеренная операция копии может вызвать потерю эффективности.
Сделать объект типа T
подвижный, добавьте конструктора перемещения:
T (T&&);
T& operator=(T&&);
T
. Если класс не должен непосредственно управлять ресурсом, можно использовать сгенерированные компилятором операторы перемещения с помощью =default
синтаксис, например:T (T&&) = default;
В противном случае, если операция пересылки не требуется, удалите std::move
вызовите и непосредственно скопируйте объект.
Повышения производительности могут варьироваться на основе компилятора, реализации библиотеки и среды, которую вы используете.
Группа: Производительность |
Язык: C++ |
Значение по умолчанию: Off |
Синтаксис командной строки:
STD_MOVE_UNMOVABLE_TYPE |
Удар: Средняя |
Const rvalue reference parameter may cause unnecessary data copies
| Const std::move input may cause a more expensive object copy
| Find defects (-checkers)