Destructor (informática)

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda

Un destructor en programación orientada a objetos es una función miembro especial llamadas automáticamente en la ejecución del programa, y por tanto no tienen por qué ser llamadas explícitamente por el programador. Sus principales cometidos son:

  • liberar los recursos computacionales que el objeto de dicha clase haya adquirido en su tiempo de ejecución al expirar éste.
  • quitar los vínculos que pudiesen tener otros recursos u objetos con éste.

Los destructores son invocados automáticamente al alcanzar el flujo del programa el fin del ámbito en el que está declarado el objeto.

El uso de destructores es clave en el concepto de Adquirir Recursos es Inicializar.

Ejemplo[editar]

C++[editar]

El destructor se nombra con el mismo nombre de la clase precedido de un símbolo de Media:tilde (~). Si la instancia de la clase se creó como una variable automática, el destructor será llamado automáticamente cuando el programa salga fuera del ámbito donde fue creada dicha instancia.

Ejemplo[editar]

#include <iostream>
#include <string>
 
class foo
{
	public:
 
	foo( void )
	{	
		print( "foo()" );
	}	
 
	~foo( void )
	{	
		print( "~foo()" );
	}
 
	void print( std::string const& text ) 
	{
		std::cout << static_cast< void* >( this ) << " : " << text << std::endl;
	}
 
/* 
	Deshabilitado el contructor de copia y el operador de asignación al hacerlos privados
*/ 
	private:
 
	foo( foo const& );
 
	foo& operator = ( foo const& );
};
 
int main( void )
{
	foo array[ 3 ];
/* 
	Cuanto la 'main' termina, el destructor es invocado para cada elemento de 'array'.
	La primera instancia creada es la última en ser destruída.
*/
}

El constructor de copia y el operador de asignación deben ser deben ser deshabilitados en clases donde no se necesitan explícitamente. Scott Meyers, Effective C++, Item 6: Explicitly disallow the use of compiler-generated functions you do not want.[1] )

Otros usos habituales de los destructores son terminar conexiones con bases de datos y liberar recursos de red.


Véase también[editar]


Referencias[editar]

  1. Scott Meyers: Effective C++, Addison-Wesley, ISBN 0-321-33487-6