C 11 の「移動元」オブジェクトの有効な状態
質問:
C 11、オブジェクトが移動されると、不特定状態になります。このような「移動元」オブジェクトが有効なままであるためには、どのような条件を満たす必要がありますか?
答え:
移動元オブジェクトの有効性は、型の仕様とによって定義されます。
標準ライブラリ タイプの場合、移動元オブジェクトは未指定だが有効な状態に置かれます。つまり、オブジェクトは、ライブラリの標準要件をすべて満たしています。特に明記されていない限り、タイプ。ユーザーは、有効な操作を決定するために状態をクエリする必要があります。
開発者定義の型の場合、有効な状態の構成要素と、移動元オブジェクトの許容される操作を定義して文書化します。
のコンテキストでは提供されている pimpl イディオムの例:
class Foo { std::unique_ptr<FooImpl> impl_; };
Foo オブジェクトから移動すると操作 do_stuff が無効になり、未定義になるように指定できます。 行動。移動は、移動元のオブジェクトに対してそれ以上の操作を実行できないことを意味するため、これは合理的です。
あるいは、標準ライブラリの概念要件が確実に満たされるように、移動元の Foo オブジェクトに特定の状態を定義することもできます。まだ会った。これにより、未定義の動作を発生させることなく、標準ライブラリで移動元 Foo オブジェクトを使用できるようになります。
標準ライブラリの概念では、移動元オブジェクトが考慮されていないことに注意してください。したがって、移動元オブジェクトが関連する概念に従って有効な状態に保たれていない場合、それらを標準ライブラリで使用すると未定義の動作が発生します。
以上がC 11 で移動元オブジェクトの有効性を保証する条件は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。