Rvalue ссылка - PullRequest
       39

Rvalue ссылка

1 голос
/ 02 сентября 2010

Пытаясь понять ссылки на Rvalue из здесь , я не могу понять две вещи

  1. Если в векторе есть N строк, каждая копия может потребовать как много как N + 1 выделения памяти и [...]

Что это за +1 в 'N + 1'?

2. Как автор неожиданно приходит к приведенному ниже указанию

Указание: не копируйте свою функцию аргументы. Вместо этого передайте их по значению и пусть компилятор сделает копирование.

Я что-то упустил?

1 Ответ

3 голосов
/ 02 сентября 2010

Что это +1 в 'N + 1'?

Одно выделение для создания базового массива для нового вектора, затем N выделений, по одному для каждой из N строкв векторе.

Как автор внезапно приходит к следующему руководству

Он утверждает, что вместо явно делает копию внутриfunction,

std::vector<std::string> 
sorted2(std::vector<std::string> const& names) // names passed by reference
{
    std::vector<std::string> r(names);         // and explicitly copied
    std::sort(r);
    return r;
}

вы должны позволить компилятору сделать копию при передаче аргументов функции,

std::vector<std::string> 
sorted2(std::vector<std::string> names)        // names passed by value
{                                              // and implicitly copied
    std::sort(names);
    return names;
}
...