Cómo mejorar el paso de parámetros std :: vector (¿mover semántica?)

Parece que no puedo entender completamente la semántica de movimiento: quiero llenar unstd::vector (miembro de una clase) de una función externa. Actualmente, tengo algo como:

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 */.
}

Tuve este código durante mucho tiempo y funciona bien. Ahora, no puedo entender cómo funciona, ya que estoy asignando una referencia a un vector que será destruido. Mis preguntas son:

¿Cómo puede funcionar este código?¿Cuál es la mejor manera de implementarfillVector yMyClass::setVector()? Creo que eso se puede hacer con la semántica de movimiento, pero no puedo entender cómo.

¡Gracias!

Respuestas a la pregunta(2)

Su respuesta a la pregunta