C++ Constructor y destructor de clase
Constructor de clase
de la claseConstructorEs una función miembro especial de la clase que se ejecuta automáticamente cada vez que se crea un nuevo objeto de ella.
El nombre del constructor es exactamente igual al nombre de la clase y no tiene tipo de retorno (ni siquieravoidpuede tener void).
Si no se define explícitamente un constructor, el compilador generará automáticamente un constructor predeterminado que no realiza ninguna operación.
El siguiente ejemplo ayuda a comprender mejor el concepto de constructor:
Ejemplo
Cuando el código anterior se compila y ejecuta, produce los siguientes resultados:
Object is being created Length of line : 6
Constructor con parámetros
El constructor predeterminado no tiene parámetros, pero si es necesario, el constructor también puede tener parámetros. De esta manera, al crear un objeto se le asignan valores iniciales sin necesidad de llamar por separado asetla función, como se muestra en el siguiente ejemplo:
Ejemplo
Cuando el código anterior se compila y ejecuta, produce los siguientes resultados:
Object is being created, length = 10 Length of line : 10 Length of line : 6
Usar listas de inicialización para inicializar campos
C++ recomienda usarla lista de inicialización de miembrospara inicializar variables miembro. Su sintaxis es agregar dos puntos después de la lista de parámetros del constructor (:), y luego escribirNombre de variable miembro (valor inicial)。
En el siguiente ejemplo,: length(len)el significado es: usar el parámetro pasadolenpara inicializar directamente la variable miembrolength.coutLo que se imprime es la variable miembrolength, no el parámetrolen, de modo que se puede verificar de forma intuitiva que la variable miembro ha sido asignada correctamente:
La sintaxis anterior es equivalente al siguiente método de asignación dentro del cuerpo de la función; ambos producen exactamente el mismo resultado:
La diferencia entre ambos métodos es que la lista de inicializaciónantes de entrar en el cuerpo de la funciónya completa la inicialización de las variables miembro, mientras que la asignación dentro del cuerpo de la función primero construye por defecto y luego asigna, añadiendo un paso. Paraconstmiembros const, miembros de referencia y miembros de objetos que no tienen constructor predeterminado, la lista de inicialización esla únicaforma de inicialización.
Supongamos que hay una clase C con varios campos X, Y, Z, etc. que necesitan inicialización; solo hay que separarlos con comas, como se muestra a continuación:
Nota:El orden de inicialización de cada miembro en la lista de inicializaciónestá determinado por su orden de declaración en la clase, no por el orden de escritura; se recomienda mantener la coherencia para evitar confusiones.
Destructor de clase
de la claseDestructores un tipo especial de función miembro de la clase, que al final del ciclo de vida del objeto (al salir del ámbito o serdeleteeliminado) se ejecuta automáticamente, y se utiliza para liberar los recursos ocupados por el objeto (como memoria dinámica, manejadores de archivos, etc.).
El nombre del destructor es exactamente igual al nombre de la clase, solo que se añade una virgulilla (~) como prefijo. No devuelve ningún valor, no puede tener parámetros, y cada clase solo puede tener un destructor.
El siguiente ejemplo ayuda a comprender mejor el concepto de destructor:
Ejemplo
Cuando el código anterior se compila y ejecuta, produce los siguientes resultados:
Object is being created Length of line : 6 Object is being deletedOtras extensiones