Jeśli inicjalizacji unique_ptr
takiego:std :: unique_ptr :: reset i wyjątki konstruktor
std::unique_ptr<Foo> i;
i.reset(new Foo());
ale jest wyjątek od Foo::Foo()
, pytanie brzmi: co się dzieje z pamięcią rozdzielone? w jaki sposób unique_ptr unika wycieku? czy to coś jest obsługiwane wewnątrz operatora new
?
Destruktor zostanie wywołany z chwilą opuszczenia lunety. Ponieważ wywołanie reset
nie jest wywoływane, dopóki nie zwróci się new Foo()
, wydaje się, że musi ono być obsługiwane przez new
, zwalniając przydzieloną pamięć, gdy wyjątek opuszcza konstruktor.
Czy tak się dzieje?
Zobacz http://stackoverflow.com/questions/4094996/what-happens-to-the-memory-allocated-by-new-if-the-constructor-throws – Jon