У меня есть класс с векторной переменной-членом, которую я заполняю следующим образом:
class Foo {
vector<int> v;
void g() {
vector<int> w;
// fill w
v = w;
}
};
Мой вопрос: временной вектор w может стать огромным, и я не хочу платить за создание копии. Должен ли я использовать std::swap вместо копирования здесь? Насколько я понимаю, std::swap будет более эффективным из-за специализации для вектора (где он просто меняет местами указатели на кучу).
v
напрямую, а не использовать временный? - person netcoder   schedule 28.06.2012std::move
отлично сработает, еслиw
действительно временный. - person Chad   schedule 28.06.2012w
вv = w;
не является значением r, поэтому оптимизация перемещения не может быть вставлена сюда автоматически. Вы правы в том, что вы можете форсировать это с помощьюstd::move(w)
(поэтому я указал это в своем ответе всего за пару секунд до вашего комментария). - person Ben Voigt   schedule 28.06.2012