移動元ベクトルの空の状態
C 標準ライブラリ型では、移動元オブジェクトは通常、有効ではあるが未指定の状態に置かれます。ただし、ベクトルが明示的にこのルールに該当するかどうかについては疑問があります。
移動コンストラクターの動作
ベクトルの移動コンストラクターの場合、次の理由により、移動元のベクトルは常に空になります。一定の複雑さの要件。コンストラクターはソース ベクターからリソースを盗んで新しいインスタンスを構築し、元のベクターを空の状態のままにします。
移動代入演算子の動作
ベクトルの移動の動作代入演算子はより微妙で、アロケーターによって異なります:
ケース 1: Propagate Move Assignment = True
この場合、移動元ベクトルは常に空になります。代入演算子は要素を破棄し、容量の割り当てを解除し、ソース ベクトルからメモリ バッファーの所有権を転送し、アロケーターを移動します。これにより、元のベクトルは空の状態のままになります。
ケース 2: 移動の割り当て = False、等しいアロケータを伝播
ケース 1 と同様に、移動元のベクトルは次のようになります。移動代入演算子によって空にされます。アロケータは移動されず、ケースの区別は動的に行われます。
ケース 3: 移動割り当ての伝播 = False、不等アロケータ
最も複雑なケースには、異なるアロケータが関係します。ここでは、移動割り当てではリソースを移動したり、アロケータを割り当てたりすることはできません。代わりに、個々の要素をソース ベクトルから宛先ベクトルに移動します。アロケーターの機能と要素の構築要件によっては、移動元ベクトルが必ずしも空であるとは限りません。ただし、実装によっては、ソース ベクトルに対して明示的に Clear() を呼び出し、空のままにすることを選択する場合があります。
以上がC における移動元ベクトルの状態は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。