c++ c++11 move-constructor

c++ - ¿Los constructores de movimiento se producen automáticamente?



c++11 move-constructor (2)

Tengo una gran clase con muchos contenedores STL.
¿Hará el compilador automáticamente un constructor de movimiento que moverá esos contenedores al objetivo o yo tendré que hacer el mío?


Los constructores de movimiento predeterminados generalmente están vinculados a los constructores de copia predeterminados. Obtienes uno cuando obtienes el otro. Sin embargo, si escribe un operador de asignación / constructor de copia, entonces no se escriben los operadores de asignación / copiadores de copia y movimiento predeterminados. Si escribe uno de cualquiera de los conjuntos, debe escribirlos todos.


Un constructor de movimiento para una clase X se declara implícitamente como predeterminado cuando

  • X no tiene un constructor de copia declarado por el usuario,
  • X no tiene un operador de asignación de copia declarado por el usuario,
  • X no tiene un operador de asignación de movimiento declarado por el usuario,
  • X no tiene un destructor declarado por el usuario, y
  • el constructor de movimiento no se definiría implícitamente como eliminado.

Entonces, por ejemplo, si su clase tiene un miembro de datos de tipo de clase que no tiene un constructor de movimiento, su clase no obtendrá un constructor de movimiento, incluso si no tiene un constructor de copia / movimiento declarado, porque el constructor de movimiento implícitamente declarado se define como eliminado (debido a ese miembro de datos).