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

289
17 июля 2017, 15:59

Почему не отлавливается исключение?

class A
{
public:
    void SHOW()
    {
        std::cout << "A" << std::endl;
        throw;
    }
};
int main()
{
    try
    {
        A* ptr = new A;
        ptr->SHOW();
    }
    catch (...)
    {
    }
}
Answer 1

Какое исключение?
Оператор 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;
    }
}
READ ALSO
Написание программы под Linux (Orange Pi)

Написание программы под Linux (Orange Pi)

Добрый деньНеобходимо написать программу, которая будет запускаться в Debian на устройстве Orange Pi

371
Плагин JQuery для события pan

Плагин JQuery для события pan

Приветствую! Подскажите пожалуйста, какой плагин нужен для JQuery события Pan-х (перетаскивание объекта в горизонтальной плоскости) и как его...

200
Javascript Сразу свернутый div. SlideToggle();

Javascript Сразу свернутый div. SlideToggle();

ПриветИспользуемую SlideToogle();

244
Ошбки в html validator

Ошбки в html validator

Сайт WordPress, проверяю в PageSpeed Insights и validatorw3

260