std::move вызывается для неподвижного типаstd::move используется для типа класса без конструктора перемещения или оператора назначения перемещения
Этот дефект возникает при использовании std::move для перемещения объекта типа класса, не имеющего конструктора перемещения или оператора назначения перемещения.
Использование std::move в таких заявлениях, как:
Obj objTo {std::move(objFrom)};
objTo = std::move(objFrom);Если класс является дорогим для копирования, непреднамеренная операция копирования может привести к потере производительности.
Создание объекта типа T movable, добавьте конструктор перемещения:
T (T&&);
T& operator=(T&&);
T. Если класс не должен непосредственно управлять ресурсом, можно использовать созданные компилятором операторы перемещения с помощью =default синтаксис, например:T (T&&) = default;
В противном случае, если операция перемещения не требуется, удалите std::move вызовите и непосредственно скопируйте объект.
Повышение производительности может зависеть от используемого компилятора, реализации библиотеки и среды.
| Группа: Производительность |
| Язык: C++ |
| По умолчанию: Откл. |
Синтаксис командной строки:
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)