换句话说是以下代码声音(定义的行为,便携式,......)
std::vector<int> vec(100,42);
std::vector<int> other = std::move(vec);
vec.resize(0);//is this sound
//using vec like an empty vector
答案 0 :(得分:9)
是的,这是安全的。
来自§23.3.6.5:
如果
sz <= size()
,则相当于调用pop_back()
size() - sz
次。如果size() < sz
,请将sz - size()
默认插入的元素附加到序列中。
所以基本上,当你致电resize(0)
时,它会调用pop_back()
,直到从矢量中删除每个元素。
移动vec
并不重要,因为即使vec
的状态未指定,它仍然是您可以修改的有效矢量。
因此,调用std::vector
后,resize(0)
将为空。
答案 1 :(得分:5)
从对象移动后,通常不能对对象的状态做出任何假设。这意味着您只能调用没有任何前提条件的成员函数。令人高兴的是,*p++
没有依赖于价值的先决条件,因此您可以在移动的向量上调用std::vector::resize
。