ホームページ > バックエンド開発 > C++ > C 11 における移動元オブジェクトの有効な状態とその定義方法は何ですか?

C 11 における移動元オブジェクトの有効な状態とその定義方法は何ですか?

Barbara Streisand
リリース: 2024-12-01 18:14:11
オリジナル
384 人が閲覧しました

What are the Valid States of Moved-from Objects in C  11 and How to Define Them?

C 11 の移動元オブジェクトの有効な状態を理解する

C 11 の移動セマンティクスでは、移動後のオブジェクトの状態という重要な概念が導入されています。から移動されています。ただし、移動元オブジェクトが満たさなければならない正確な条件は、混乱を招く可能性があります。

pimpl オブジェクトの問題

クラスがオブジェクトをラップする、pimpl イディオムを考えてみましょう。実装オブジェクトへのポインタ。 Foo オブジェクト (std::unique_ptr を含む) から移動した場合、その後そのオブジェクトで何ができるでしょうか?

  • それを破棄したり代入したりしても安全です。
  • メンバー関数を (実装ポインター経由で) 呼び出すと、削除された関数を参照する可能性があるため、問題が発生します。 object.

標準ライブラリの移動元状態

C 標準では、標準ライブラリ型の移動元オブジェクトは「未指定だが有効な状態」に配置されると定義されています。州。"これは、有効な前提条件を持つそれらの型に対して操作を実行できることを意味します。

ただし、非標準型の場合は、有効な状態と、移動元から許可される操作を定義して文書化する必要があります。

pimpl の有効な状態の定義

Foo の例では、そこから移動するとレンダリングされるように指定できます。 do_stuff 関数が無効です。これにより、移動元オブジェクトで誤って呼び出してしまうのを防ぐことができます。

動的割り当ての回避

有効な状態をチェックするときに動的割り当てのオーバーヘッドを回避するには、次のことを考慮してください。 「null オブジェクト」パターンを使用します。これには、オブジェクトが無効な状態にあるときに使用されるデフォルトの FooImpl が含まれます。

概念と移動元オブジェクト

最後に、移動元オブジェクトに注意してください。標準ライブラリの概念の要件を満たしている必要があります。型が有効な状態に保たれていない場合、それを標準ライブラリ関数で使用すると、未定義の動作が発生する可能性があります。

以上がC 11 における移動元オブジェクトの有効な状態とその定義方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート