se un costruttore genera un'eccezione, quali distruttori vengono eseguiti?
I distruttori di tutti gli oggetti creati completamente in tale ambito.
Fa alcuna differenza se l'eccezione è durante l'elenco di inizializzazione o il corpo?
Tutti gli oggetti completati verranno distrutti.
Se costruttore è mai completamente chiamato oggetto non è mai stato costruito e pertanto non può essere distrutto.
E l'eredità ei membri? Presumibilmente tutte le costruzioni completate vengono distrutte. Se solo alcuni membri sono costruiti, solo quelli vengono distrutti? Se esiste un'ereditarietà multipla, tutti i costruttori completati vengono distrutti? L'ereditarietà virtuale cambia qualcosa?
Tutte le costruzioni completate vengono distrutte. Sì, solo gli oggetti completamente creati vengono distrutti.
Buona Lettura:
Constructor Failures by Herb Sutter
In particolare, l'amore la parte in cui si spiega:
In termini biologici, il concepimento è avvenuto - il costruttore ha iniziato -, ma nonostante i migliori sforzi è stato seguito da un aborto spontaneo - il costruttore non ha mai corso a termine (inazione).
Per inciso, questo è il motivo per cui un distruttore non verrà mai chiamato se il costruttore non ha avuto successo - non c'è nulla da distruggere. "Non può morire, perché non è mai vissuto." Si noti che questo rende la frase "un oggetto il cui costruttore ha generato un'eccezione" davvero un ossimoro. Una cosa del genere è ancora meno di un ex oggetto ... non è mai vissuto, mai è stato, non ha mai respirato per primo.
fonte
2012-04-18 15:35:15
C'è qualche ragione per cui non l'hai testato tu stesso? –
@Steve: Perché basarsi sul comportamento di una particolare versione del compilatore è una pessima idea se si desidera un codice portatile o gestibile. –
@ BenVoigt - Sono d'accordo in teoria. Ma quando stai codificando nel mondo reale, devi affrontare la realtà. E sarei estremamente sorpreso se tutti i principali compilatori non avessero ragione. –