重用移动的容器的正确方法是什么?
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似乎是正确的方法,因为 move 之后的对象在
”除非另有说明,否则这些移离的物体应放置在 处于有效但未指明的状态”
我从来没有发现有任何实例是“另有说明”的。
虽然我觉得 vec3有点迂回,而且更喜欢 v1,虽然 vec3可以允许一些额外的优化,但是另一方面很容易导致错误。
我的假设正确吗?