Originariamente inviato da YuYevon
La mia domanda essenzialmente è: qual è, di preciso, lo scopo di un metodo distruttore all'interno di una classe?
Garantire il cleanup delle risorse.
Originariamente inviato da YuYevon
In estrema sintesi, avrebbe senso dichiarare (e definire) un distruttore - in una classe - esattamente come questo:
codice:
~nome_classe() { };
Come sempre, dipende. Se non si intende ereditare dalla classe, un distruttore vuoto ha poco senso. Se però si intende derivare dalla classe, il distruttore dev'essere virtual (pena comportamento indefinito.) anche se vuoto.

Nel tuo caso specifico, il fatto che tu abbia implementato una "distruggiAlbero()" non garantisce che all'uscita dello scope dell'oggetto, l'albero venga distrutto.
Inserendo il metodo nel distruttore (ovviamente con i controllo che l'albero esista ancora o no.) garantisce che "distruggiAlbero()" sia invocata almeno una volta.
Se questo sembra rindondante, occorre ricordare che l'introduzione delle eccezioni in C++ ha cambiato il modo di programmare. Se viene lanciata un'eccezione prima dell'invocazione di "distruggiAlbero()" e tale eccezione non è gestita, "distruggiAlbero()" non è mai invocata, mentre il distruttore si.
E il concetto base del paradigma RAAI.
Un esempio è fstream::~fstream() dove viene invocata la fstream::close()