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)