移動不可能な型で std::move が呼び出される
移動コンストラクターまたは移動代入演算子のないクラス型で std::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++ |
| 既定値: オフ |
コマンド ライン構文: STD_MOVE_UNMOVABLE_TYPE |
| 影響度: Medium |
バージョン履歴
R2020b で導入