ホームページ > バックエンド開発 > C++ > 移動した C コンテナを再利用するにはどうすればよいですか?

移動した C コンテナを再利用するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-04 19:58:11
オリジナル
687 人が閲覧しました

How Should You Reuse a Moved C   Container?

移動されたコンテナの再利用: 正しい動作の確認

コンテナは移動されると、C 0x 標準ドラフトに従って「有効だが未指定の状態」になります。 。このような状況では、移動したコンテナを正しく再利用する方法を理解することが重要です。

次のコード スニペットを検討してください。

std::vector<int> container;
container.push_back(1);
auto container2 = std::move(container);

// ver1: Do nothing
//container2.clear(); // ver2: "Reset"
container = std::vector<int>() // ver3: Reinitialize

container.push_back(2);
assert(container.size() == 1 && container.front() == 2);
ログイン後にコピー

標準のオプション ver3 に従って、これにはコンテナの再初期化が含まれます。コンテナを移動するのが正しいアプローチです。これは、移動操作の後、オブジェクトが未指定の状態になるためです。

標準では、「有効だが未指定の状態」を次のように定義しています。

「有効ではないオブジェクトの状態」オブジェクトの不変条件が満たされ、オブジェクトに対する操作がその型で指定されたとおりに動作することを除き、指定されています。

これは、移動元のオブジェクトが生きたままであり、移動できることを意味します。ただし、前提条件が満たされている場合に限ります。ベクターの場合、clear() を使用してコンテナをクリアすると、前提条件はなく、既知の状態に戻ります。

したがって、clear() を使用して、移動されたコンテナをリセットし、

移動したコンテナに対してclear()を呼び出すオプションver2も有効です。ただし、移動されたコンテナーが空であると想定して最適化が行われる可能性があります。 clear() を使用すると、最適化に関係なく、コンテナーが確実に既知の状態に戻されます。

何も行わないオプション ver1 は推奨されません。これは、移動後のコンテナーが不特定の状態になり、予期しない動作が発生する可能性があるためです。

以上が移動した C コンテナを再利用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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