重用已移动容器的正确方法是什么?
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 可以允许一些额外的优化,但另一方面容易出错。
我的假设是正确的吗?