CPP-101: Обработка на изключения

Генериране и обработка на изключения

Механизмът за обработката на изключения в C++ предоставя стандартни, вградени в езика средства за реагиране на ненормални, грешни ситуации по време на изпълнение програмата. Механизмът на изключенията предоставя еднообразен синтаксис и стил за обработка на грешки в програмата. Той елиминира нуждата от изрични проверки за грешки и съсредоточава кода за обработка на грешки в отделни части на програмата.

Основните компоненти, които формират механизма за обработка на изключения в C++ са следните:

  • При възникване на ненормална ситуация в програмата, програмистът сигнализира за настъпването й чрез генерирането на изключение. Когато се генерира изключение нормалното изпълнение на програмата се прекратява докато изключението не бъде обработено. В C++ за генериране на изключение се използва ключовата дума throw. Например, в следния фрагмент в ред 8 се генерира изключение от типа StackError ако се опитаме да прочетем елемент от празен стек:

    class StackError { ... };
    class Stack {
        ...
    public:
        ...
        int pop(void) {
        if(top_<=0)
            throw StackError();
        return data_[--top_];
        }
        ...
    }
    
  • Точка в програмата, където генерираното изключение се обработва. Най-често изключенията в програмата се генерират и обработват от различни функции. Намирането на секция за обработка на генерирано изключение често води до развиване на програмния стек. След като изключението бъде обработено изпълнението на програмата продължава нормално. Възстановяването на изпълнението на програмата обаче става не от точката на генериране на изключението, а от точката, където изключението е било обработено. В C++ обработката на изключенията се изпълнява в catch-секции. Например, в следващата catch-секция се обработва изключението, генерирано в предходния фрагмент:
    catch(StackError ex) {
        log_error(ex);
        exit(1);
    }
    
  • Всяка една catch-секция трябва да се асоциира с try-блок. В един try-блок се групират един или повече оператори, които могат да генерират изключения, с една или повече catch-секции. Например:
    try {
      // Използване на обекти от класа Stack
      ...
    } catch(StackError ex) {
      // Обработка на грешка при използването на стека
      ...
    } catch(...) {
      // Обработка на всички останали грешки
      ...
    }
    

    Ако се генерира изключение от типа StackError, то ще бъде прихванато и обработено от catch-секцията в ред 4. Използването на секция catch(...), където вместо тип на изключението се използва многоточие, означава, че тази catch-секция прихваща изключения от всякакъв тип. Следователно всички изключения, генерирани в try-блока, които не са от типа StackError ще бъдат прихванати и обработени от catch-секцията в ред 7.

Публикувано в CPP-101, ООП с етикети , , . Постоянна връзка.

Един коментар по CPP-101: Обработка на изключения

  1. Pingback: CPP-101: Кратък обзор на езика за програмиране C++ | Записки по програмиране

Коментарите са затворени.