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!