RAII riguarda in parte la decisione quando un oggetto diventa responsabile della propria pulizia - la regola è che l'oggetto diventa responsabile se e quando la sua inizializzazione del costruttore viene completata. La simmetria di inizializzazione e pulizia, costruttore e distruttore, significa che i due hanno stretti legami tra loro.
Un punto di RAII è garantire la sicurezza delle eccezioni - che l'applicazione rimanga autoconsistente quando vengono generate eccezioni. A prima vista questo è banale: quando un'eccezione provoca la chiusura di un ambito, le variabili locali in tale ambito devono essere distrutte.
Ma cosa succede se il lancio dell'eccezione si verifica all'interno di un costruttore?
Bene, l'oggetto non è stato completamente costruito, quindi non può essere distrutto in modo sicuro. Il costruttore dovrebbe aver provato i blocchi necessari per assicurarsi che vengano eseguite tutte le pulizie necessarie prima che l'eccezione venga propagata. Una volta che l'eccezione si propaga al di fuori dell'ambito in cui l'oggetto è stato costruito, non vi sarà alcuna chiamata al distruttore, poiché l'oggetto non è stato costruito in primo luogo.
Considerare in particolare i costruttori per i dati dei membri all'interno dell'oggetto che vengono distrutti. Se uno di questi genera un'eccezione, il tuo codice costruttore principale non verrà eseguito affatto, ma avrà un codice che costituisce una parte implicita di quel costruttore. Tutti i membri che sono stati costruiti con successo verranno automaticamente distrutti. I membri che non sono stati costruiti (incluso quello che ha generato l'eccezione) non lo sono.
Quindi, in sostanza, RAII è una politica che garantisce che tutto ciò che viene completamente costruito verrà distrutto in modo tempestivo, in particolare in presenza di eccezioni, e che qualsiasi oggetto sia completamente costruito o non lo sia (non ci sono metà- oggetti costruiti che non puoi sapere come ripulire in sicurezza). Anche le risorse allocate vengono liberate. E gran parte del lavoro è automatizzato, quindi il programmatore non deve preoccuparsi troppo.