Se inizializzare un unique_ptr
come questo:std :: :: unique_ptr azzerati e le eccezioni costruttore
std::unique_ptr<Foo> i;
i.reset(new Foo());
ma viene generata un'eccezione dal Foo::Foo()
, la domanda è: cosa succede con la memoria allocata? come fa unique_ptr a evitare che venga trapelato? è qualcosa gestito all'interno dell'operatore new
?
Il distruttore verrà chiamato quando si esce dall'ambito. Poiché la chiamata reset
non viene richiamata fino a new Foo()
resi, sembra che questo debba essere gestito da new
, liberando la memoria allocata quando l'eccezione lascia il costruttore.
E 'questo che succede?
Vedere http://stackoverflow.com/questions/4094996/che-happens-to-the-memory-allocated-by-new-if-the-constructor-throws – Jon