~
firma que es un destructor y cuando alguna vez el objeto sale del alcance, se llama al destructor correspondiente.
¿Cuándo se llama al destructor?
Tomando un ejemplo -
#include <iostream>
class foo
{
public:
void checkDestructorCall() ;
~foo();
};
void foo::checkDestructorCall()
{
foo objOne; // objOne goes out of scope because of being a locally created object upon return of checkDestructorCall
}
foo:: ~foo()
{
std::cout << "Destructor called \t" << this << "\n";
}
int main()
{
foo obj; // obj goes of scope upon return of main
obj.checkDestructorCall();
return 0;
}
Resultados en mi sistema:
Destructor called 0xbfec7942
Destructor called 0xbfec7943
Este ejemplo solo sirve para indicar cuando un destructor se llama. Pero destructor está escrito solo cuando la clase maneja recursos.
¿Cuándo la clase administra los recursos?
#include <iostream>
class foo
{
int *ptr;
public:
foo() ; // Constructor
~foo() ;
};
foo:: foo()
{
ptr = new int ; // ptr is managing resources.
// This assignment can be modified to take place in initializer lists too.
}
foo:: ~foo()
{
std::cout << "Destructor called \t" << this << "\n";
delete ptr ; // Returning back the resources acquired from the free store.
// If this isn't done, program gives memory leaks.
}
int main()
{
foo *obj = new foo;
// obj is pointing to resources acquired from free store. Or the object it is pointing to lies on heap. So, we need to explicitly call delete on the pointer object.
delete obj ; // Calls the ~foo
return 0;
}
Resultados en mi sistema:
Destructor called 0x9b68008
Y en el programa, se publicarán No veo la necesidad de escribir destructor. Espero eso ayude !
O cuando se produce automáticamente eliminación. – justkt
Tenga en cuenta que '~' también puede indicar bitwise no en un contexto diferente. – Muggen
+1 pero agregó precisión en la palabra "eliminar". – Klaim