することができます私のinsert
に挿入することができます。は、私はこのような移動コンテナに移動し、コンテナ
std::unordered_set<int> foo, bar;
bar = std::move(foo);
foo.clear(); // Should I do this?
foo.insert(0);
することができます私のinsert
に挿入することができます。は、私はこのような移動コンテナに移動し、コンテナ
std::unordered_set<int> foo, bar;
bar = std::move(foo);
foo.clear(); // Should I do this?
foo.insert(0);
Aが移動-からオブジェクトもはや使用する必要があります。
あなたが主張しているのであれば、それが以前は空であったかどうかに関わらず、実際に空のコンテナを残すことに気付くでしょう(これは標準では定義されていません)。挿入すると、foo
には1つの要素が含まれます。
あなたのようになりますようなコードを書くためのより正常な方法:すべての
bar.swap(foo);
foo.clear();
foo.insert(0);
まず、あなたは常にセットにを挿入することができます。インサートは前提条件(例えば、消去とは異なる)を持たないので、要素が移動され、クリアされ、要素で満たされる。
しかし:あなたが移動後clear
を呼び出さない場合は移動後、foo
が有効であるため、新たに挿入された要素は、set
の唯一の要素になりますならば、あなたは知らないが、不特定状態。したがって、移動後にclear
に電話して新しい要素を挿入するだけでなく、ほとんどの状況ではになるはずです(他の要素が何であるか気にしない限り)。
'clear'メンバ関数の呼び出しの後でも? – FrozenHeart
@FrozenHeart:あなたの文章を完了できますか? –
'clear'コールの後に移動元のコンテナを使用できますか? – FrozenHeart