Al "nucleo" di gestione delle eccezioni è che praticamente tutto deve essere ripulito dai distruttori. Ad esempio, se "nuovo" un oggetto ottieni un puntatore "grezzo"; se viene lanciata un'eccezione devi assicurarti che questo puntatore raw sia correttamente "cancella" d - ma assicurati di non eliminare un puntatore raw che non è stato inizializzato.
D'altra parte, se si memorizza quel puntatore in uno std :: unique_ptr non è necessario fare nulla; quando il unique_ptr viene distrutto l'oggetto viene cancellato e la distruzione dell'oggetto avviene automaticamente: quando unique_ptr esce dall'ambito, il compilatore invoca la pulizia, completamente invisibile (quindi non più code-cluttering con tonnellate di chiamate di cleanup) e automaticamente (quindi non più 'ahi, quando prende quel percorso raro che nessuno ha veramente provato, dimentica di ripulire').
Lo stesso può essere applicato a quasi tutte le risorse; ci sono "puntatori automatici" per gli oggetti COM (come quelli usati in DirectX, per esempio), la maggior parte dei framework dovrebbe fornire un oggetto tipo "scope scope" per avvolgere mutex (quindi blocca il mutex quando l'oggetto viene creato, e lo sblocca quando è distrutto) e puoi scrivere minuscoli wrapper per gestire vari handle di Windows.
Fondamentalmente, se metti tutta la tua pulizia in distruttori, non dovrai mai "provare ... prendere ... ripensare" solo per ripulire. E i distruttori di oggetti "più grandi" saranno spesso molto semplici, poiché praticamente tutti gli oggetti "contenuti" vengono automaticamente rimossi dai loro distruttori.
fonte
2012-10-04 10:57:59
Che ne dici di link, che Als ti offre qui http://stackoverflow.com/questions/12723492/how-to-clean-initialized-resources-if-exception-thrown-from-constructor-in-c? Sono oggetti membri di questo membro? – ForEveR
Quale maneggiamento avete bisogno? Normalmente, si dovrebbe semplicemente propagare l'eccezione, in modo che i primi 5 oggetti vengano distrutti in modo pulito. Qualche altro contesto sarebbe utile – jalf
RAII. (Http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization) – ScaryAardvark