Introducción a Destructor en C ++

Como todos sabemos, C ++ es un lenguaje de programación orientado a objetos y se usa ampliamente en las industrias de TI para el desarrollo de software, controladores, firmware integrado y aplicaciones cliente-servidor. Es un lenguaje de nivel medio que encapsula las características del lenguaje de alto y bajo nivel. Tiene un concepto de clases y objetos. En C ++, los constructores juegan un papel importante en la creación de un objeto e inicializar las variables de instancia, pero ¿qué sucede con estos objetos y recursos después de que ya no están en uso o el programa termina? Destructores se encarga de esta responsabilidad en C ++. Los destructores se utilizan para destruir los objetos creados por los constructores cuando ya no son necesarios para liberar la memoria. Son funciones miembro especiales y son llamadas automáticamente por C ++. compilador para liberar la memoria cuando no hay un destructor definido por el usuario en el programa. Al igual que los constructores, los destructores también tienen el mismo nombre que la clase precedida por un signo de tilde (~). Pero destructor no acepta ningún argumento / parámetro y no devuelve nada, es decir, no tiene ningún tipo de retorno.

Los destructores nunca se pueden sobrecargar como constructores en una clase. A continuación se presentan algunas de las situaciones en las que el compilador llama automáticamente al destructor:

  • Cuando se llama a un operador de eliminación.
  • Cuando finaliza la ejecución del programa.
  • Cuando finaliza el bloque / alcance de las variables locales.

Un programador puede definir un destructor conocido como un constructor diseñado por el usuario. Un destructor se puede declarar como virtual o virtual puro, pero no se puede declarar const, volátil, const volátil o estático.

¿Cómo funciona Destructor en C ++?

Para el funcionamiento del destructor, deben tenerse en cuenta los puntos mencionados a continuación:

  • Los destructores de objetos de clase se llaman primero antes de llamar al destructor de miembros y bases. Los destructores de la clase base no virtual se llaman antes que los destructores de la clase base virtual.
  • Antes de las clases base, se llama al destructor de miembros no estáticos. Los destructores de las clases base virtuales y no virtuales se invocan en el orden inverso de su declaración.
  • El compilador de C ++ llama automáticamente a los destructores implícitos cuando un objeto se sale del alcance o la ejecución del programa termina para objetos externos y estáticos en un programa. Se llama a los destructores para destruir los objetos creados por una nueva palabra clave.
  • En el caso de los destructores implícitos y definidos por el usuario, el compilador primero ejecuta el cuerpo del destructor y luego llama a los destructores de todas las clases no variantes no estáticas y luego llama a los destructores de las clases base no virtuales y virtuales en el orden inverso de Su construcción.

Sintaxis de Destructor

Los destructores en C ++ están precedidos por el signo tilde (~). A continuación se menciona la sintaxis básica de destructor:

Sintaxis:

Class class_name()
(


public:
class_name(); // Constructor
~class_name(); // destructor
)
)

En la sintaxis, 'class_name' es el nombre de la clase y en el método principal, se definen tanto el constructor como el destructor con el mismo nombre de la clase. Destructor no tiene parámetros ni tipo de retorno.

Ejemplos de Destructor en C ++

A continuación se menciona el ejemplo de Destructor en C ++:

Ejemplo # 1: Programa con Destructor definido por el usuario

Código:

#include
using namespace std;
class Example1( //class
public:
Example1()( // constructor cout << “Hello I am inside a constructor” << endl;
)
~Example1()( //destructor
cout << “Hello I am inside a destructor” << endl;
)
void display()
(
cout << “Hello this is a display method” << endl
)
);
int main()
(
Example1 ex; //object created
ex.display(); // display method called return 0;
)

Salida:

En el ejemplo anterior, 'Ejemplo1' es el nombre de la clase y 'ex' es el objeto creado de esa clase. Primero, se llama al constructor, por lo que el texto escrito en el constructor se imprime, luego el método de visualización se llama ana, por último, se llama al destructor después de que se completa la ejecución del programa.

Ejemplo # 2: Programa con Destructor Virtual

Código:

#include
using namespace std;
class b1 ( //base class
public:
b1() // constructor of base class
(
cout << “Hello this is base constructor” << endl;
)
~virtual b1() // destructor of base class
(
cout << “Hello this is base destructor” << endl;
)
);
class b2: public b1( // derived class of base class (b1) public:
b2() //constructor of derived cass
(
cout << “Hello this is derived constructor” << endl;
)
~ b2() // destructor of derived class
(
cout << “Hello this is derived destructor” << endl;
)
);
int main(void) //main method
(
b2 *der = new b2();
b1 *bas = der;
delete der;
getchar();
return 0;
)

Salida:

Es una buena práctica hacer que el destructor de la clase base sea tan virtual como esto asegura que el objeto de la clase derivada se destruya correctamente. Siempre que se use una clase virtual, se debe agregar un destructor virtual de inmediato para evitar futuros resultados inesperados.

Ventajas de Destructor en C ++

  • Da la oportunidad final de limpiar los recursos que no están en uso para liberar la memoria ocupada por objetos no utilizados, como eliminar objetos dinámicos, cerrar los identificadores del sistema, archivos usados.
  • Debido a la gran cantidad de recursos que ocupan espacio y no se utilizan en la computadora, el destructor siempre viene con una buena imagen para reducir las posibilidades de pérdida de memoria al destruir esas cosas no utilizadas.
  • Aunque C ++ tiene el mecanismo de Recolección de Basura, pero llamar al destructor automáticamente, ya sea que el programador lo llame o no para liberar espacio, evita al usuario muchas situaciones peores en el futuro.

Puntos para resumir sobre Destructor

  • Los destructores se utilizan para destruir los recursos no utilizados de una clase.
  • Los destructores tienen el mismo nombre que el nombre de la clase que precede con el signo (~).
  • A diferencia de los constructores, no puede haber ningún parámetro del destructor.
  • No hay ningún tipo de retorno de destructor.
  • Si el usuario no define el destructor por sí mismo en un programa, el compilador construye automáticamente un destructor para él.
  • No puede haber más de un destructor en una sola clase.

Conclusión

La descripción anterior de destructores define claramente el uso y la implementación del destructor en el programa C ++. Aunque el concepto del destructor no es complejo, es muy importante comprenderlo antes de la implementación en el programa, ya que el uso incorrecto del destructor puede conducir a algunos resultados inesperados.

Artículo recomendado

Esta es una guía para Destructor en C ++. Aquí discutimos Introducción al Destructor en C ++ y Funcionamiento del Destructor junto con Ventajas. También puede consultar nuestros otros artículos sugeridos para obtener más información:

  1. Destructor en Java (Ejemplos)
  2. Introducción a la anulación en C ++
  3. Patrones en C ++ (Ejemplos)
  4. Tipos de constructor en C ++
  5. Destructor en Python (sintaxis, ejemplos)