Использование std :: move - PullRequest
       15

Использование std :: move

11 голосов
/ 12 октября 2011

До C++11 Я использовал функцию swap-to-back, чтобы избежать накладных расходов на глубокое копирование, например:

vector<vector<Object> > Objects;

for(/* some range */)
{
    vector<Object> v;
    for(/* some other range */)
    {
        v.push_back(/* some object */);
    }
    Objects.push_back(vector<Object>());
    Objects.back().swap(v);
}

Как я могу использовать std::move для перемещения v в Objects, чтобы избежать накладных расходов на глубокое копирование вместо swap?
Я знаю, что здесь есть много обходных путей, таких как мульти-массивы или просто вставка непосредственно в Objects.back(), но мне нужен пример использования std::move, чтобы понять это.

Ответы [ 2 ]

17 голосов
/ 12 октября 2011
Objects.push_back( std::move( v ) );
16 голосов
/ 12 октября 2011
vector<vector<Object> > Objects;

for(/* some range */)
{
    vector<Object> v;
    for(/* some other range */)
    {
        v.push_back(/* some object */);
    }
    Objects.push_back(std::move(v));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...