Wenn ein unique_ptr
wie folgt initialisieren:std :: unique_ptr :: zurückgesetzt und Konstruktor Ausnahmen
std::unique_ptr<Foo> i;
i.reset(new Foo());
aber eine Ausnahme von Foo::Foo()
geworfen wird, ist die Frage: Was tun mit dem Speicher geschieht verteilt? Wie verhindert unique_ptr das Auslaufen? Ist das etwas in new
Operator behandelt?
Der Destruktor wird sicherlich aufgerufen, wenn der Bereich beendet wird. Da der reset
Aufruf nicht aufgerufen wird, bis new Foo()
zurückgibt, scheint es, dass dies von new
gehandhabt werden muss, indem der reservierte Speicher freigegeben wird, wenn die Ausnahme den Konstruktor verlässt.
Passiert das?
Siehe http://stackoverflow.com/questions/4094996/what-happen-to-the-memory-allocated-by-new-if-the-constructor-throws – Jon