sintaxis para funcion ejemplos copyrobot copiar con comando c++ copy-constructor default-constructor move-constructor move-assignment-operator

c++ - para - ejemplos de copy cmd



¿Condiciones para la generación automática de operador predeterminado/copiar/mover ctor y copiar/mover asignación? (2)

Quiero actualizar mi memoria en las condiciones bajo las cuales un compilador genera automáticamente un constructor predeterminado, un constructor de copias y un operador de asignación.

Recuerdo que había algunas reglas, pero no recuerdo, y tampoco puedo encontrar un recurso confiable en línea. ¿Alguien puede ayudar?


A continuación, "generado automáticamente" significa "implícitamente declarado como predeterminado, pero no definido como eliminado". Hay situaciones en las que se declaran las funciones de miembros especiales, pero se definen como eliminadas.

  • El constructor predeterminado se genera automáticamente si no hay un constructor declarado por el usuario (§12.1 / 5).
  • El constructor de copia se genera automáticamente si no hay un constructor de movimiento declarado por el usuario o un operador de asignación de movimiento (porque no hay constructores de movimiento ni operadores de asignación de movimiento en C ++ 03, esto simplifica a "siempre" en C ++ 03) ( §12.8 / 8).
  • El operador de asignación de copias se genera automáticamente si no hay un constructor de movimientos declarado por el usuario o un operador de asignación de movimiento (§12.8 / 19).
  • El destructor se genera automáticamente si no hay un destructor declarado por el usuario (§12.4 / 4).

C ++ 11 y posteriores solamente:

  • El constructor de movimientos se genera automáticamente si no hay un constructor de copias declarado por el usuario, un operador de asignación de copias o un destructor, y si el constructor de movimientos generado es válido (§12.8 / 10).
  • El operador de asignación de movimiento se genera automáticamente si no hay un constructor de copia declarado por el usuario, un operador de asignación de copia o un destructor, y si el operador de asignación de movimiento generado es válido (por ejemplo, si no necesita asignar miembros constantes) (§12.8 / 21).