C 11 での移動元オブジェクトの有効性
C 11 でオブジェクトが移動元になると、その状態が不定になり、疑問が生じますその後どのような操作を実行できるかについて。標準ライブラリ タイプは、有効ではあるが指定されていない状態に移動されますが、カスタム タイプは、移動元の有効な状態を決定するために明示的な定義が必要です。
pimpl オブジェクトの場合、実装はポインタの後ろに隠されており、 Foo オブジェクトの pimpl ポインタが離れたら、そのオブジェクトで何ができるのかという疑問が生じます。移動元オブジェクトの破棄または再割り当ては安全ですが、pimpl ポインタが無効になっているため do_stuff などの操作を試みると失敗します。
標準設計では、移動元オブジェクトの不特定の状態を許可することで保守的なアプローチを奨励しています。異なるライブラリ間での効率的な実装。これには、操作を実行する前にオブジェクトの状態をクエリする必要があります。このタスクは、特に移動操作の頻度が高いシナリオでは、パフォーマンスのオーバーヘッドを引き起こす可能性があります。
このようなクエリの必要性を回避するために、カスタム タイプは次のことを行うことができます。移動元の後の有効な状態を明示的に指定します。たとえば、pimpl クラスは、そこから移動すると do_stuff が未定義の動作で無効になると宣言できます。このアプローチにより、ユーザーはオブジェクトからの移動によって起こり得る結果を確実に認識し、潜在的なエラーを回避できます。
移動元オブジェクトは、標準ライブラリで定義されている概念の要件を引き続き満たさなければならないことに注意してください。これには、移動元の州は考慮されていません。したがって、関連する概念で定義されている有効な状態を維持しないカスタム型を標準ライブラリで使用すると、未定義の動作が発生する危険があります。
以上がC 11 では移動元オブジェクトで何ができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。