Он называется «деструктор», а не «deconstructor».
Внутри деструктора каждого класса вам нужно удалить все остальные переменные-члены, которые были назначены новым.
edit: Чтобы уточнить:
Скажите, что у вас есть
struct A {}
class B {
A *a;
public:
B () : a (new A) {}
~B() { delete a; }
};
class C {
A *a;
public:
C () : a (new A) {}
};
int main () {
delete new B;
delete new C;
}
Выделение экземпляра B, а затем удаление является чистым, потому что то, что B выделяет внутри, также будет удалено в деструкторе.
Но экземпляры класса C будут утечки памяти, поскольку он выделяет экземпляр A, который он не выпускает (в этом случае C даже не имеет деструктора).