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).
He encontrado el siguiente diagrama muy útil.