c++ - C ++:移动矢量而不是复制和清除
问题描述
考虑到我有一个伪代码
std::vector< Something > myVector;
while (someCondition) {
// Populate vector
functionThatNeedsCopyOfVector(myVector);
myVector.clear()
};
关键是这个片段实现了多次“重用”同一个向量对象的模式,它总是用一些元素填充它,然后将向量的副本传递到某个地方,然后清除它并重新开始。
考虑到这一点,我认为原则上应该可以优化这个片段以
std::vector< Something > myVector;
while (someCondition) {
// Populate vector
functionThatNeedsCopyOfVector(std::move(myVector));
};
(假设有一个functionThatNeedsCopyOfVector
接受右值引用的重载)
然而,这显然是 UB(本身)的移动后使用的情况。但是我想知道标准是否会规定向量的移动构造函数的行为方式,以及它是否会包含一些东西,例如使原始向量等于新构造的向量(因为内部数据结构被移动了)?
如果有这样的保证,那么“move-snippet”不应该是UB,对吧?
如果它确实是 UB:是否有一种模式可以用来避免(看似)不需要的副本,但无论如何都要在之后清除它?