Loading AI tools
programación De Wikipedia, la enciclopedia libre
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:
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.
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[1].
#include <iostream>
#include <string>
class foo
{
public:
foo()
{
print( "foo()" );
}
~foo()
{
print( "~foo()" );
}
void print( std::string const& text )
{
std::cout << static_cast< void* >( this ) << " : " << text << std::endl;
}
/*
Deshabilitado el constructor 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 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.[2])
Otros usos habituales de los destructores son terminar conexiones con bases de datos y liberar recursos de red.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.