Destruktora NIE WOŁA się samodzielnie. Stosuje się go kiedy musisz po obiekcie posprzątać. Zmiana wartości pól w klasie z reguły nie należy do zadań destruktora (chociaż istnieją przykłady sytuacji kiedy można by takie coś robić). Poza tym twój destruktor NIE MA CIAŁA, wiec co wg ciebie miałby robić? o_O
Przykład kiedy sie go stosuje:
#include <iostream>
#include <cstring>
using namespace std;
class Person
{
char* name;
public:
Person(const char* const n)
{
cout<<"tworzenie obiektu i alokacja pamieci"<<endl;
name=new char[strlen(n)]; //alokujemy pamięć, gdzieś ją trzeba zwolnić jak obiekt będzie niszczony!
strcpy(name,n);
}
~Person()
{
cout<<"kasowanie obiektu i zwalnianie pamieci"<<endl;
delete[] name; //tak, właśnie tutaj to zwolnimy
}
};
int main()
{
Person* ala = new Person("Ala"); //tworzymy obiekt
delete ala; //niszczymy obiekt, pamięć zostanie zwolniona
{
Person ola("Ola"); //tworzymy obiekt
} //wychodzimy poza zakres, obiekt zostanie zniszczony
return 0;
}