Программирование в среде Windows, обработка исключительных ситуаций, страница 2

#include <iostream.h>

int main()

{

    int* buffer;

    try

    {

        buffer = new int[256];

        if (buffer == NULL)

            throw "Memory allocation failed!";

        else

            delete buffer;

    }

    catch(char* exception)

    {

        cout << exception << endl;

    }

    return 0;

}

Когда в программе выбрасывается исключение, выполнение программы продолжается с первой строки блока catch. (Оставшаяся в блоке try часть текста программы не выполняются.) Единственный оператор блока catch просто выводит сообщение на консоль, после чего выполняется оператор return и программа завершает работу.

Если выделение памяти пройдет успешно, будет выполнен весь блок try и отведенная под buffer память будет возвращена операционной системе. В этом случае весь блок catch будет пропущен и программа перейдет непосредственно к выполнению оператора  return.

Объекты исключений. Можно создать специальный класс для определенных типов исключений, которые могут генерироваться в ваших программах. Далее приведен текст программы, в которой определяется универсальный класс исключений с именем MyException. В случае неудачного завершения процедуры выделения памяти главная программа создаст объект этого класса и вызовет исключение, параметром которого и будет этот объект. Блок catch перехватит параметр — объект класса MyException, вызовет метод GetError() этого объекта и выберет с его помощью строку сообщения об имевшей место ошибке, а затем отобразит эту строку на экране.

#include <iostream.h>

class MyException

{

protected:

    char* m_msg;

public:

    MyException(char *msg) { m_msg = msg; }

    ~MyException(){}

    char* GetError() {return m_msg; };

};

int main()

{

    int* buffer;

    try

    {

        buffer = new int[256];

        if (buffer == NULL)

        {

            MyException* exception =

                new MyException("Memory allocation failed!");

            throw exception;