Share via


Funciones miembro especiales

Las funciones miembro especiales son funciones miembro de clase (o estructura) que, en determinados casos, el compilador genera automáticamente. Estas funciones son el constructor predeterminado, el destructor, el constructor de copia y el operador de asignación de copia, y el constructor de movimiento y el operador de asignación de movimiento. Si la clase no define una o varias funciones miembro especiales, el compilador puede declarar y definir implícitamente las funciones que se usan. Las implementaciones generadas por el compilador se denominan funciones miembro especiales predeterminadas. El compilador no genera funciones si no son necesarias.

Puede declarar explícitamente una función miembro especial predeterminada mediante la palabra clave = default. Esto hace que el compilador defina la función solo si es necesario, igual que si la función no se hubiera declarado en absoluto.

En algunos casos, el compilador puede generar funciones miembro especiales eliminadas, que no están definidas y, por lo tanto, no se pueden llamar. Esto puede ocurrir en casos en los que una llamada a una función miembro especial determinada en una clase no tiene sentido, debido a las demás propiedades de la clase. Para evitar explícitamente la generación automática de una función miembro especial, puede declararla como eliminada mediante la palabra clave = delete.

El compilador genera un constructor predeterminado, que es un constructor que no toma ningún argumento, solo cuando no se ha declarado ningún otro constructor. Si ha declarado solo un constructor que toma parámetros, el código que intenta llamar a un constructor predeterminado hace que el compilador genere un mensaje de error. El constructor predeterminado generado por el compilador realiza una inicialización predeterminada simple miembro a miembro del objeto. La inicialización predeterminada deja todas las variables miembro en un estado indeterminado.

El destructor predeterminado realiza la destrucción miembro a miembro del objeto. Solo es virtual si un destructor de clase base es virtual.

Las operaciones predeterminadas de construcción y asignación de copia y movimiento realizan copias de patrones de bits miembro a miembro o movimientos de miembros de datos no estáticos. Las operaciones de movimiento solo se generan cuando no se declara ningún destructor ni operaciones de movimiento o copia. Un constructor de copia predeterminado solo se genera cuando no se declara ningún constructor de copia. Se elimina implícitamente si se declara una operación de movimiento. Un operador de asignación de copia predeterminado solo se genera cuando no se declara explícitamente ningún operador de asignación de copia. Se elimina implícitamente si se declara una operación de movimiento.

Consulte también

Referencia del lenguaje C++