Además del constructor que se llama automáticamente cuando se crea un objeto de clase como se mencionó en la sección anterior, también se llama automáticamente a una función cuando se destruye el objeto. También tiene el mismo nombre que el nombre de la clase y no tiene valor de retorno. Hay una tilde ~ delante del nombre. Uso Para distinguir el constructor, su función se utiliza principalmente para limpiar las consecuencias después de que se libera el objeto. Es el destructor .
Al igual que el constructor y el nombre de la clase, no hay valor de retorno. Si el usuario no lo define, el sistema generará automáticamente un destructor vacío. Una vez definido por el usuario, se llama automáticamente cuando se destruye el objeto.
A diferencia de los constructores, aunque ambos son de tipo público. La construcción se puede sobrecargar y tiene varios hermanos, pero el destructor no se puede sobrecargar, pero puede ser una función virtual y una clase solo puede tener un destructor.
A continuación, tomamos la clase Student como ejemplo y continuamos agregando un destructor. Al mismo tiempo, agregamos información sobre la clase actual tanto en el constructor como en el destructor para identificar qué clase se crea y se destruye. Lea el código con atención. :
#include<iostream>#include<Cstring>usingnamespacestd;classStudent{private:intnum;//número de estudiante charname[100];//nombre intscore;//score public:Student(intn,char*str,ints);~Student ();intprint();intSet(intn,char*str,ints);};Estudiante::Estudiante(intn,char*str,ints){num=n;strcpy(nombre,str);score=s;cout <<num<<<<nombre<<<<puntuación<<;cout<<Constructor<<endl;}Estudiante::~Estudiante(){cout<<num<<<<nombre<<<<puntuación<<; cout<<destructor<<endl;}intStudent::print(){cout<<num<<<<nombre<<<<puntuación<<endl;return0;}intStudent::Set(intn,char*str,ints) {num=n;strcpy(nombre,cadena);score=s;}intmain(){EstudianteA(100,punto,11);EstudianteB(101,cpp,12);return0;}
Comprenda cuidadosamente el constructor y el destructor en el código anterior, tenga en cuenta que los dos objetos A y B están definidos en la función principal y pruébelo en su propia computadora. Puede ver que el efecto de ejecución es el siguiente:
¡Puedes ver que el orden de llamada de los constructores y el orden de llamada de los destructores de los objetos A y B son completamente opuestos! La razón es que los objetos A y B son objetos locales y también se almacenan en el área de la pila. ¡También siguen el orden "primero en entrar, último en salir".
¡Asegúrese de probar y verificar los resultados en persona!