У меня есть функция, которая возвращает вектор или набор:Как избежать копирования, когда я вернусь
set<int> foo() {
set<int> bar;
// create and massage bar
return bar;
}
set<int> afoo = foo();
В этом случае создать временное пространство памяти в функции Foo(), а затем назначить его до afoo
путем копирования. Я действительно хочу избежать этой копии, любым простым способом я могу это сделать в C++ 11? Я думаю, что это связано с вещью rvalue.
ОК, обновите вопрос: если я собираюсь вернуть объект, определенный мной, не векторный или заданный объект, значит ли это, что я должен определить конструктор перемещения? следующим образом:
class value_to_return {
value_to_return (value_to_return && other) {
// how to write it here? I think std::move is supposed to be used?
}
}
ЧИТАЕТ!
Теперь у вас нет копий на C++ 11. Он может делать ходы, но даже это почти наверняка будет оптимизировано [N/RVO] (http://en.wikipedia.org/wiki/Return_value_optimization). –
«Как избежать копирования при возврате» - компиляция с компилятором выпущена не более 10 лет назад. –
У меня очень соблазн свернуть все ответы, в которых не упоминаются ходы/rvalues. –