我有一个具有向量成员变量的类,我填写如下:
class Foo {
vector<int> v;
void g() {
vector<int> w;
// fill w
v = w;
}
};
我的问题:临时矢量w可能变得很大,我不想付出代价 复制建设。我应该使用std :: swap而不是复制吗?我的理解 是因为矢量的专业化(它在哪里),std :: swap会更有效率 只会将指针交换到堆)。
答案 0 :(得分:14)
是的,你应该在这里交换。在C ++ 11中,您也可以说v = std::move(w);
。
无论哪种方式,变量w
都会立即超出范围,因此其内容无关紧要,您也可以转移所有权而不是复制。