Страницы

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

суббота, 4 января 2020 г.

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

#cpp #ооп #исключения


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

class A
{
public:
    void SHOW()
    {
        std::cout << "A" << std::endl;
        throw;
    }
};

int main()
{
    try
    {
        A* ptr = new A;
        ptr->SHOW();
    }
    catch (...)
    {

    }
}

    


Ответы

Ответ 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; } }

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

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