Vermeiden kopieren von Objekten mit der "return" - Anweisung

Ich habe eine sehr grundlegende Frage in C++.
Wie zu vermeiden, kopieren Sie, wenn Sie ein Objekt zurückgeben ?

Hier ist ein Beispiel :

std::vector<unsigned int> test(const unsigned int n)
{
    std::vector<unsigned int> x;
    for (unsigned int i = 0; i < n; ++i) {
        x.push_back(i);
    }
    return x;
}

Als ich verstehen, wie C++ funktioniert, wird diese Funktion erstellen Sie 2 Vektoren : die lokale (x), und die Kopie von x, die zurückgegeben werden. Gibt es eine Möglichkeit zu vermeiden, die kopieren ? (und ich will nicht zurück einen Zeiger auf ein Objekt, aber das Objekt selbst)


Was wäre die syntax der Funktion mit "move-Semantik" (das Stand in den Kommentaren)?

  • move-Semantik: www2.research.att.com/~bs/C++0xFAQ.html#rval
  • Es wird nicht unbedingt eine Kopie erstellen. NRVO oder verschieben symantics kann das verhindern.
  • Sie können sich auf Ihr compiler für die Durchführung NRVO Magie oder ausdrücklich verwenden Sie move-Semantik.
  • Die "Kopie von x, die zurückgegeben werden" können konstruiert werden durch den übergang von x, oder den Bau erstellte, um sich auf das gleiche Objekt wie x. Die Semantik der Sprache bereits vermeiden Sie Kopien.
  • In Antwort auf Ihre Bearbeiten - Sie müssen nicht zum ändern der syntax überhaupt. Alles, was förderfähig ist für copy elision verwenden müssen, bewegen den Bau (wenn der Bau noch nicht erstellte insgesamt).
  • NRVO oder nicht, was ist, wenn der return-Typ kann nicht kopiert werden (D. H. Sie verursacht einen compile-Fehler)?

InformationsquelleAutor Vincent | 2012-05-07
Schreibe einen Kommentar