std::move called on an unmovable typestd::move используется в типе класса без конструктора перемещения или оператора назначения перемещения
Этот дефект возникает, когда вы используете std::move перемещение объекта типа класса, у которого нет конструктора перемещения или оператора назначения перемещения.
Использование std::move в операторах, таких как:
Obj objTo {std::move(objFrom)};
objTo = std::move(objFrom);Если класс дорого копируется, операция непреднамеренного копирования может привести к потере эффективности.
Чтобы создать объект типа T movable, добавить конструктор перемещения:
T (T&&);
T& operator=(T&&);
T. Если класс не должен непосредственно управлять ресурсом, можно использовать созданные компилятором операторы move с помощью =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)