Mam funkcji, która zwraca wektor lub Zestaw:Jak uniknąć kopię kiedy wrócę
set<int> foo() {
set<int> bar;
// create and massage bar
return bar;
}
set<int> afoo = foo();
W tym przypadku, tworzę tymczasową przestrzeń pamięci w funkcji foo(), a następnie przypisać do afoo
przez skopiowanie. Naprawdę chcę uniknąć tej kopii, w jakikolwiek łatwy sposób I może to zrobić w C++ 11? Myślę, że to ma związek z rzeczą rvalue.
OK, aktualizacja pytania: jeśli mam zamiar zwrócić obiekt zdefiniowany przeze mnie, nie jest to wektor lub zestaw rzeczy, to znaczy, że powinienem zdefiniować konstruktor ruchu? podobnie jak:
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?
}
}
Pozdrawiam !!!
To, co teraz masz, nie będzie żadnych kopii w C++ 11. Może wykonywać ruchy, ale nawet te prawie na pewno zostaną zoptymalizowane przez [N/RVO] (http://en.wikipedia.org/wiki/Return_value_optimization). –
"jak uniknąć kopiowania po powrocie" - kompilacja z kompilatorem wydanym nie więcej niż 10 lat temu. –
Jestem bardzo kuszony, aby ująć wszystkie odpowiedzi, które nie wspominają o ruchach/wartościach rowych. –