32 Исключительные ситуации: иерархия и способы передачи информации в обработчик.

Иерархей в ситуации с исключениями является стек вызова функций. При возникновении любой особой ситуации в блоке try его работа прерывается: происходит принудительный выход из всех функций, которые были активны в точке особой ситуации, и вызов деструкторов для всех созданных при этом объектов, как это происходит при выходе из блока (области видимости). Этот процесс называется раскруткой стека: стек возвращается в состояние, в котором он был при входе в блок try. Далее просматриваются блоки catch в том порядке, в каком они объявлены. Как только обнаруживается блок обработки ошибок нужного типа, управление передаётся ему. Остальные блоки catch не используются. Если же выполнение блока try завершилось успешно, все блоки catch после него игнорируются.

Для того, чтобы можно было передавать информацию в обработку с помощью исключений нужно для класса исключения создать конструктор, в который будет передаваться информация. Пример такого класса:

class Error {
private:
    char *msg =  nullptr;
public:
    Error (char *msg) {
        this->msg = msg;
    }
    char* getMsg() {
        return msg;
    }
}

results matching ""

    No results matching ""