Если деструктор выбрасывает 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.
Если наконец блок введен в Java из-за исключения в соответствующем Ьгу блоке, и, наконец, блок выбрасывает второе исключение, то первое исключение молча проглотил. Пример:
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"
}
}
Этот вопрос перешел мне на ум: может ли язык программирования обрабатывать несколько исключений одновременно? Будет ли это полезно? Вы когда-нибудь пропустили эту способность? Есть ли язык, который уже поддерживает это? Есть ли опыт такого подхода?
Любые мысли?
Вы только что выбрали мой мозг исключение –
Интересный вопрос. Я предполагаю, что «обрабатывая исключение», вы специально подразумеваете «раскручивание стека из-за исключения», а не «выполнение кода из блока catch». Последнее я бы назвал «обработкой исключения», но поскольку обработчик был обнаружен, вы можете исключить из него исключение (по крайней мере, на C++). –
@Nick Вы правы, я редактировал заголовок.Если вы знаете лучший, не стесняйтесь менять его снова ;-) – fredoverflow