移動されたコンテナの再利用: 正しいアプローチ
移動されたコンテナを C で再利用するという話題が議論を引き起こしました。この記事では、そのような状況に対処するための正しい方法について説明します。
次のコード スニペットを考えてみましょう:
std::vector<int> container; container.push_back(1); auto container2 = std::move(container); // ver1: Do nothing //container2.clear(); // ver2: "Reset" container = std::vector<int>() // ver3: Reinitialize container.push_back(2); assert(container.size() == 1 && container.front() == 2);
C 0x 標準ドラフトによれば、ver3 は、移行されて以来、推奨されるアプローチであるようです。オブジェクトは「有効だが特定されていない状態」にあります。この概念を明確にするために、標準の定義を参照してください。
[defns.valid] §17.3.26 valid but unspecified state an object state that is not specified except that the object’s invariants are met and operations on the object behave as specified for its type
これは、移動されたオブジェクトがまだ生きており、前提条件のあるアクションを除いて、通常どおり操作できることを意味します (前提条件が検証されない限り)
たとえば、clear() オペレーションには前提条件がありません。 clear() を使用すると、コンテナは定義された状態にリセットされ、その後の利用が可能になります。
したがって、移動されたコンテナを再利用する正しい方法は、ver2 で説明されているように、clear() 操作を実行することです。コードスニペット。このアプローチにより、コンテナーが既知の一貫した状態に確実に復元されます。
以上が移動したコンテナを C で適切に再利用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。