Шаг 9.
Класс xalloc

    На этом шаге мы приведем краткое описание класса xalloc.

    Объект класса xalloc, созданный как исключение, передает информацию об ошибке при обработке запроса на выделение памяти. Класс xalloc создан на базе класса xmsg, который выдает сообщение, определяющее сформированное исключение. Определение xmsg в заголовочном файле except.h выглядит так:

    class xmsg { 
      public:
        xmsg(const string & msg);
        xmsg(const xmsg & msg);
        ~xmsg();
        const string & why() const;
        void raise() throw(xmsg);
        xmsg& operator=(const xmsg & src); 
      private:
        string _FAR *str; 
    };

    Класс xmsg не имеет конструктора по умолчанию. Общедоступный (public) конструктор: xmsg (string msg) предполагает, что с каждым xmsg-объектом должно быть связано конкретное явно заданное сообщение типа string. Тип string определен в заголовочном файле cstring.h.

    Общедоступные (public) компонентные функции класса:

void raise() throw(xmsg);
Вызов raise() приводит к порождению исключения xmsg. В частности, порождается *this.
inline const string _FAR & xmsg::why() const { return *str; };
Выдает строку, использованную в качестве параметра конструктором класса xmsg. Поскольку каждый экземпляр (объект) клссса xmsg обязан иметь собственное сообщение, все его копии должны иметь уникальные сообщения.

    Вернемся к классу xalloc. Он описан в заголовочном файле except.h следующим образом:

    class xalloc : public xmsg 
    { 
      public:
        xalloc(const string &msg, size_t size); // Конструктор.
        size_t requested() const;
        void raise() throw(xalloc); 
      private:
        size_t siz;
    };

    Класс xalloc не имеет конструктора по умолчанию, поэтому каждое определение объекта xalloc должно включать сообщение, которое выдается в случае, если не может быть выделено size байт памяти. Тип string определен в заголовочном файле cstring.h.

    Общедоступные (public) компонентные функции класса xalloc:

void xalloc::raise() throw(xalloc);
Вызов raise() приводит к порождению исключения типа xalloc. В частности, порождается *this.
inline size_t xalloc::requested() const { return siz; }
Функция возвращает количество запрошенной для выделения памяти.

    На следующем шаге мы рассмотрим примеры программной обработки исключений при динамическом выделении памяти.




Предыдущий шаг Содержание Следующий шаг