class Caja { Caja :: Caja (double dim1, double dim2, double
dim3) Caja::~Caja (void) { longitud = 0;
anchura = 0; altura = 0; } double Caja:: volumen (void) main () cout << "El volumen de la caja grande es " <<
grande.volumen() << '\n';# include <iostream.h>
Si algún bloque de memoria fuera reservada dinámicamente en un objeto,
se puede utilizar el destructor para liberarla antes de que se pierdan los
punteros a esas variables.
double longitud, anchura,
altura;
public:
Caja (double dim1, double
dim2, double dim3);
~Caja (void);
double volumen (void);
};
{
longitud = dim1;
anchura
= dim2;
altura = dim3;
};
return longitud * anchura * altura;
};
{
Caja pequeña(5, 4, 10), mediana (10, 6, 20),
grande(20, 10, 30);
}
class Taco { main () delete soft;#include <iostream.h>
public:
Taco (int hard)
{
hardness = new
int;
*hardness = hard;
}
~Taco()
{
cout << "Destroying taco with hardness "
;
cout << *hardness
<<;\n';
delete
hardness;
}
private:
int *hardness; };
{
Taco hard(10);
Taco *soft = new
Taco (0);
};
En este ejemplo, vemos que el constructor tiene el mismo nombre
que la clase, con un ~ delante. Cuando se crean punteros a clases, como soft en
el ejemplo, se llama al destructor cuando se libera la memoria del puntero. Si
esto no se hace, nunca se llamará al destructor.
Con clases declaradas
estáticamente, como Taco hard, el destructor se llama al final de la función
donde se declara el objeto (en el ejemplo, al final de la función main.
Incluse cuando se interrumpe un programa usando una llamada a exit(), se
llama a los destructores de los objetos que existen en ese momento.