У меня есть класс:
class Foo
{
public:
Foo()
{
something_ = new int;
throw std::exception("Bad");
}
~Foo()
{
delete something_;
}
}
Тогда у меня есть этот пример кода:
// Destructor is called
{
std::unique_ptr<Foo> foo;
foo.reset(new Foo());
}
// Destructor is NOT called
try
{
std::unique_ptr<Foo> foo;
foo.reset(new Foo());
}
catch(std::exception e)
{
}
Я не совсем понимаю, почему деструктор не вызван в try/catch. Не истекает ли срок действия unique_ptr для вызова dtor?
Спасибо за любую информацию.
Во-первых, исключение выбрасывается из конструктора Foo
, т.е. до того, как объект будет создан и назначен unique_ptr
.
Во-вторых, деструктор для объекта не будет вызываться в любом случае, если конструктор не удался.
throw
, но состояние приложения испортилось.