C 11 の移動元オブジェクトの有効な状態を理解する
C 11 の移動セマンティクスでは、移動後のオブジェクトの状態という重要な概念が導入されています。から移動されています。ただし、移動元オブジェクトが満たさなければならない正確な条件は、混乱を招く可能性があります。
pimpl オブジェクトの問題
クラスがオブジェクトをラップする、pimpl イディオムを考えてみましょう。実装オブジェクトへのポインタ。 Foo オブジェクト (std::unique_ptr
標準ライブラリの移動元状態
C 標準では、標準ライブラリ型の移動元オブジェクトは「未指定だが有効な状態」に配置されると定義されています。州。"これは、有効な前提条件を持つそれらの型に対して操作を実行できることを意味します。
ただし、非標準型の場合は、有効な状態と、移動元から許可される操作を定義して文書化する必要があります。
pimpl の有効な状態の定義
Foo の例では、そこから移動するとレンダリングされるように指定できます。 do_stuff 関数が無効です。これにより、移動元オブジェクトで誤って呼び出してしまうのを防ぐことができます。
動的割り当ての回避
有効な状態をチェックするときに動的割り当てのオーバーヘッドを回避するには、次のことを考慮してください。 「null オブジェクト」パターンを使用します。これには、オブジェクトが無効な状態にあるときに使用されるデフォルトの FooImpl が含まれます。
概念と移動元オブジェクト
最後に、移動元オブジェクトに注意してください。標準ライブラリの概念の要件を満たしている必要があります。型が有効な状態に保たれていない場合、それを標準ライブラリ関数で使用すると、未定義の動作が発生する可能性があります。
以上がC 11 における移動元オブジェクトの有効な状態とその定義方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。