3

我有一个类,它有一个向量成员变量,我填写如下:

class Foo {
vector<int> v;
void g() {
  vector<int> w;
  // fill w
  v = w;
}

};

我的问题:临时向量 w 可能会变得很大,我不想付出复制构建的代价。我应该在这里使用 std::swap 而不是复制吗?我的理解是 std::swap 由于向量的专门化(它只会交换指向堆的指针)而更有效。

4

1 回答 1

14

是的,你应该在这里交换。在 C++11 中,你也可以说v = std::move(w);.

无论哪种方式,变量w都会立即超出范围,因此它的内容无关紧要,您最好转移所有权而不是复制。

于 2012-06-28T15:06:00.697 回答