重用已移动容器的正确方法是什么?
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有点round回,并且会更喜欢ver1,但是vec3可以允许进行其他一些优化,但另一方面很容易导致错误。
我的假设正确吗?
clear
,因为它没有先决条件(因此也不依赖于对象的状态)。