C 11 の移動元オブジェクトの有効性
C 11 の移動元オブジェクトの有効性を理解することは複雑な場合があります。この記事は、特に pimpl オブジェクトのコンテキストで概念を明確にすることを目的としています。
移動元オブジェクト
オブジェクトが移動元になると、その状態は不定になります。標準ライブラリは、標準ライブラリ タイプの有効性基準を定義し、移動元オブジェクトが有効ではあるが未指定の状態に置かれることを保証します。ただし、カスタム タイプの場合、移動元オブジェクトの有効な状態と許可される操作を定義して文書化するのは開発者の責任です。
例: Pimpl Idiom
In pimpl イディオムの例では、impl_ メンバーは動的割り当てを指します。移動操作の後、移動元オブジェクトのポインタは nullptr に設定されます。これにより、 do_stuff() メソッドは impl_ ポインタを逆参照しようとするため、無効になります。
不変状態と有効状態
Foo オブジェクトが常に do_stuff できる不変式() は、から移動された後は無効になります。一般に、移動元オブジェクトは、移動されていないオブジェクトに適用されるすべての不変条件を満たさない可能性があります。
オプション 1: チェックされた操作
1 つのオプションは、明示的にチェックすることです。 do_stuff() で impl_ ポインタが nullptr の場合、必要に応じて初期化します。ただし、これによりパフォーマンスのオーバーヘッドが発生する可能性があります。
オプション 2: 無効な状態を定義する
あるいは、移動元の Foo オブジェクトが無効な状態にあることをコードで明示的に定義することもできます。状態であり、それらに対して do_stuff() を呼び出すと、 error.
概念と移動元オブジェクト
標準ライブラリによって定義された概念では、移動元オブジェクトが考慮されないことに注意することが重要です。概念の要件を満たすには、カスタム タイプの移動元オブジェクトも概念要件を満たしている必要があります。
結論
移動元オブジェクトの有効性を理解することが重要です。移動セマンティクスを正しく実装するため。開発者は、オブジェクトの状態に対する移動操作の影響を慎重に検討し、それに応じて予想される動作を定義する必要があります。
以上がC 11 の移動元オブジェクトの有効性と許可される操作は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。