Страницы

Поиск по вопросам

понедельник, 28 января 2019 г.

выброс исключения без имени

Почему не отлавливается исключение?
class A { public: void SHOW() { std::cout << "A" << std::endl; throw; } };
int main() { try { A* ptr = new A; ptr->SHOW(); } catch (...) {
} }


Ответ

Какое исключение? Оператор throw без аргумента означает "сгенерировать перехваченное исключение заново" и применяется только в блоке catch
Если бы вы написали что-то типа throw 0 или throw "Error" - дело другое. А так...
Вот ситуация, где ваш throw действительно сработает:
class A { public: void SHOW() { std::cout << "A" << std::endl; throw; } };
int main() { try { A* ptr = new A; try { throw 5; } catch (...) { ptr->SHOW(); } } catch(int x) { cout << x << endl; } }

Комментариев нет:

Отправить комментарий