移動したコンテナを再利用する正しい方法は何ですか?
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);
私がC ++ 0x標準ドラフトで読んだものから。ver3は正しい方法のようです。移動後のオブジェクトは、
「特に明記されていない限り、そのような移動元のオブジェクトは、有効であるが指定されていない状態に置かれるものとします。」
「他の方法で指定された」インスタンスは見つかりませんでした。
ver3は少し回り道で、ver1の方がはるかに好ましいと思いますが、vec3は追加の最適化を可能にしますが、一方で、簡単に間違いを引き起こす可能性があります。
私の仮定は正しいですか?
clear
前提条件がないため(したがって、オブジェクトの状態に依存しないため)、を呼び出すことができます。