c++ vector c++11 move-constructor

c++ - Mover la semántica con un miembro std:: vector



move constructor c++ (1)

Si no escribe ningún constructor explícito de copia o movimiento ni ningún operador de asignación de copia o movimiento ni un destructor, entonces el constructor de movimiento provisto por defecto mueve los elementos uno por uno. Para más detalles, ver 12.8.9.

Dado que define su propio constructor de copia, no obtendrá un constructor de movimiento de forma predeterminada. Defina uno (quizás = default ) o elimine el constructor de copia explícito.

Las clases bien compuestas generalmente no deberían necesitar Big Five personalizados, y en cambio confían en los miembros que las proporcionan y usan la versión predeterminada.

Lo siento si esto se ha pedido antes, pero como lo entiendo, en C ++ 11, std::vector tiene un constructor de movimientos por lo que las copias apenas cuestan nada en ciertas situaciones, como devolver uno por valor. Sin embargo, si tengo una clase como esta, con un vector como variable miembro:

class MyClass { public: MyClass() { } MyClass(const MyClass& rhs) { } // other interfaces private: std::vector<int> myvec; // implementation };

Y tiene una función que devuelve uno de estos por valor, como

MyClass somefunc() { MyClass mc; // fill mc.myvec with thousands (maybe even millions) of ints return mc; }

¿Se llamará al constructor de movimientos de mc.myvec se mc.myvec el constructor de movimientos de std::vector aunque MyClass no sepa nada sobre los constructores de movimientos? ¿O se llamará al constructor de copia de vector y todos esos miles (tal vez incluso millones) de int deben copiarse uno por uno?