std::move called on an unmovable type
std::move used on a class type with no move constructor or move
assignment operator
Description
This defect occurs when you use std::move to move an object of a class
type that does not have a move constructor or move assignment operator.
Risk
The use of std::move in statements such
as:
Obj objTo {std::move(objFrom)};
objTo = std::move(objFrom);If the class is expensive to copy, the unintended copy operation can cause a loss of performance.
Fix
To make an object of type T movable, add a move
constructor:
T (T&&);
T& operator=(T&&);
T. If the class does not have to directly manage a resource, you can
use compiler-generated move operators using the =default syntax, for
instance:T (T&&) = default;
Otherwise, if a move operation is not required, remove the std::move
call and directly copy the object.
Performance improvements might vary based on the compiler, library implementation, and environment that you are using.
Examples
Result Information
| Group: Performance |
| Language: C++ |
| Default: Off |
Command-Line Syntax:
STD_MOVE_UNMOVABLE_TYPE |
| Impact: Medium |
Version History
Introduced in R2020b
See Also
Find defects
(-checkers) | Const std::move input may cause a more
expensive object copy | Const rvalue reference parameter may
cause unnecessary data copies
Topics
- Interpret Bug Finder Results in Polyspace Desktop User Interface
- Interpret Bug Finder Results in Polyspace Access Web Interface (Polyspace Access)
- Address Results in Polyspace User Interface Through Bug Fixes or Justifications
- Address Results in Polyspace Access Through Bug Fixes or Justifications (Polyspace Access)