Las funciones miembro especiales, son funciones que son generadas por el compilador de forma automática si son utilizadas, aunque no sean declaradas explícitamente por el programador.
Las funciones miembro especiales son:
- Constructor por defecto (Default constructor)
- Constructor de copia (Copy constructor)
- Constructor de movimiento (Move constructor)
- Operador de asignación de copia (Copy assignment operator)
- Operador de asignación de movimiento (Move assignment operator)
- Destructor
Para profundizar sobre la sintaxis y las diferencia de cada uno de los constructores leer post constructores.
¿Cuando el compilador genera las funciones?
(I) Si defines cualquiera de las funciones anteriores, el compilador no genera las funciones por defecto.
(II) Si no defines alguna de las siguientes:
- Constructor de copia.
- Operador de asignación de copia.
- Destructor
el compilador si trata de generar las funciones por defecto por ti. Incluso si has definido alguna de las anteriores.
(III) Si defines alguno:
- Constructor con argumentos X(int, double).
- Constructor de copia.
- Constructor de movimiento.
El compilador no genera las versiones por defecto.
(IV) Si escribes alguno de los siguientes:
- Constructor de copia
- Operador de asignación
- Destructor
El compilador asume que el manejo de los recursos no es trivial y no genera el constructor de movimiento y el operador de asignación de movimiento