grazie a tutti per le risposte e grazie shodan per il link, davvero interessante. ho capito che il gc per una serie di motivi non è l'ideale nel c++, ad es. perché per via del suo "indeterminismo" il distruttore perde gran parte della sua utilità.
mi chiedo, cosa pensate voi del costrutto "finally"? perché non è presente nel c++? bjarne dice che non è stato implementato perché gli smart pointers lo sostituiscono e svolgono il lavoro in modo migliore. voi siete d'accordo? perché non implementarlo e lasciare al programmatore la scelta?
esiste un modo pulito di "mimare" il finally?
ad esempio avendo un programma che utilizza al 90% classi derivate dalla stessa classe base, ha senso utilizzare un riferimento a questa classe base come parametro dell'eccezione, e poi questa al suo interno richiama il distruttore della classe derivata (dell'oggetto) che ha generato l'eccezione? ha senso?
pensate che l'uso di shared_ptr + weak_ptr risolva tutti i problemi, compreso quello dei "reference cycles"?

EDIT:

oppure si può far implementare a tutte le classi una stessa interfaccia che si occupa della gestione delle eccezioni, e poi tramite questa fare sì che venga chiamato automaticamente il distruttore dell'oggetto che ha generato l'eccezione? è una cosa fattibile o sto sparando cretinate?