ベクトル展開中の移動セマンティクスの強制
std::vector にコピー コンストラクターと移動コンストラクターの両方を持つオブジェクトが含まれている状況では、次のようになります。ベクトルが拡張するときに移動コンストラクターの使用を強制することが望ましい。これにより、効率的なメモリ管理が保証され、不必要なコピーが防止されます。
問題:
クラス A のオブジェクトの std::vector は、コピー コンストラクター A( const A& )push_back を介してサイズを拡大するとき。ただし、代わりに移動コンストラクター A(A&&) を利用することが望ましいです。
解決策:
ベクトル展開中に移動コンストラクターの使用を有効にするには、次のようにします。手順が必要です:
例:
次のコードは、 std::vector:
A(A &&rhs) noexcept { std::cout << "i am the move constr" << std::endl; ... some code doing the move ... m_value=std::move(rhs.m_value) ; // etc... }
で認識される移動コンストラクタの実装を宣言して実装する移動コンストラクターを noExcept として指定すると、std::vector はサイズを拡大するときにそれを使用できるようになります。
追加の考慮事項:
以上が展開中に std::vector に移動セマンティクスを強制的に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。