3

ベクトルメンバー変数を持つクラスがあり、次のように入力します。

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

};

私の質問:一時的なベクトルwは巨大になる可能性があり、コピー構築の代償を払いたくありません。ここにコピーする代わりにstd::swapを使用する必要がありますか?私の理解では、std :: swapは、vector(ヒープへのポインターをスワップするだけ)に特化しているため、より効率的になります。

4

1 に答える 1

14

はい、ここで交換する必要があります。C ++ 11では、と言うこともできますv = std::move(w);

いずれにせよ、変数wはすぐにスコープから外れるので、その内容は重要ではありません。コピーする代わりに所有権を譲渡することをお勧めします。

于 2012-06-28T15:06:00.697 に答える