Wie verbessert man die Übergabe von std :: vector-Parametern (Semantik verschieben?)

Es scheint, dass ich die Bewegungssemantik nicht vollständig verstehen kann: Ich möchte ein @ ausfüllstd::vector (Mitglied einer Klasse) von einer externen Funktion. Derzeit habe ich so etwas wie:

void fillVector(MyClass & myclass) {
    std::vector<int> vec;
    /* Filling vec */
    // ...
    myclass.setVector(vec);
}

class MyClass {
    public:
         setVector(const std::vector<int> & v) { v_ = v;}
    private:
         std::vector<int> v_;
};

int main() {
    MyClass myclass;
    fillVector(myclass);
    /* Use myclass.v_ somehow */.
}

Ich hatte diesen Code für eine lange Zeit, und es funktioniert gut. Jetzt kann ich nicht verstehen, wie es funktioniert, da ich einen Verweis auf einen Vektor zuordnet, der zerstört wird. Meine Fragen sind:

Wie kann dieser Code funktionieren?Was ist der beste Weg, um @ zu implementierfillVector undMyClass::setVector()? Ich denke, das kann man mit der Bewegungssemantik machen, aber ich kann nicht herausfinden, wie.

Vielen Dank

Antworten auf die Frage(4)

Ihre Antwort auf die Frage