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