ホームページ >バックエンド開発 >C++ >C における移動元ベクトルの状態は何ですか?

C における移動元ベクトルの状態は何ですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-23 21:42:15799ブラウズ

What is the State of a Moved-From Vector in C  ?

移動元ベクトルの空の状態

C 標準ライブラリ型では、移動元オブジェクトは通常、有効ではあるが未指定の状態に置かれます。ただし、ベクトルが明示的にこのルールに該当するかどうかについては疑問があります。

移動コンストラクターの動作

ベクトルの移動コンストラクターの場合、次の理由により、移動元のベクトルは常に空になります。一定の複雑さの要件。コンストラクターはソース ベクターからリソースを盗んで新しいインスタンスを構築し、元のベクターを空の状態のままにします。

移動代入演算子の動作

ベクトルの移動の動作代入演算子はより微妙で、アロケーターによって異なります:

ケース 1: Propagate Move Assignment = True

この場合、移動元ベクトルは常に空になります。代入演算子は要素を破棄し、容量の割り当てを解除し、ソース ベクトルからメモリ バッファーの所有権を転送し、アロケーターを移動します。これにより、元のベクトルは空の状態のままになります。

ケース 2: 移動の割り当て = False、等しいアロケータを伝播

ケース 1 と同様に、移動元のベクトルは次のようになります。移動代入演算子によって空にされます。アロケータは移動されず、ケースの区別は動的に行われます。

ケース 3: 移動割り当ての伝播 = False、不等アロケータ

最も複雑なケースには、異なるアロケータが関係します。ここでは、移動割り当てではリソースを移動したり、アロケータを割り当てたりすることはできません。代わりに、個々の要素をソース ベクトルから宛先ベクトルに移動します。アロケーターの機能と要素の構築要件によっては、移動元ベクトルが必ずしも空であるとは限りません。ただし、実装によっては、ソース ベクトルに対して明示的に Clear() を呼び出し、空のままにすることを選択する場合があります。

以上がC における移動元ベクトルの状態は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。