Если деструктор создает C ++ во время разматывания стека, вызванного исключением, программа завершается. (Вот почему деструкторы никогда не должны бросать в C ++.) Пример:
struct Foo
{
~Foo()
{
throw 2; // whoops, already throwing 1 at this point, let's terminate!
}
};
int main()
{
Foo foo;
throw 1;
}
terminate called after throwing an instance of 'int'
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Если блок finally введен в Java из-за исключения в соответствующем блоке try, и этот блок finally вызывает второе исключение, первое исключение незаметно проглатывается. Пример:
public static void foo() throws Exception
{
try
{
throw new Exception("first");
}
finally
{
throw new Exception("second");
}
}
public static void main(String[] args)
{
try
{
foo();
}
catch (Exception e)
{
System.out.println(e.getMessage()); // prints "second"
}
}
Этот вопрос приходил мне в голову: может ли язык программирования обрабатывать несколько исключений одновременно? Это было бы полезно? Вы когда-нибудь пропускали эту способность? Есть ли язык, который уже поддерживает это? Есть ли опыт такого подхода?
Есть мысли?