Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Например, для работы с файлами можно определить класс FilePointer,





работающий как FILE*:

class FilePointer {

private:

FILE* fptr;

public:

FilePointer(const char* filename, const char* attr)

{ fptr = fopen(filename, attr); }

FilePointer(FILE* pf) { fptr = pf; }

~FilePointer() { fclose(fptr); }

operator FILE*() { return fptr; }

};

Переменную типа FilePointer мы можем создавать, имея либо указатель FILE*,

Либо параметры для функции fopen(). В любом случае, автоматическая

Локальная переменная типа FilePointer будет уничтожена при выходе из области

Видимости, и ее деструктор закроет файл. Функция use_file() сокращается до

минимума:

void use_file(const char* filename)

{

FilePointer f(filename, “w”);

// используем f

}

И деструктор будет вызван независимо от того, завершается функция

Нормально или возникает исключительная ситуация.

Описанная выше техника управления ресурсами путем инициализации

Переменных является достаточно общим приемом, основанным на свойствах

Конструкторов и деструкторов и их взаимодействием с системой обработки

исключений в С++. Объект не считается созданным, пока не выполнен его

Конструктор. Только в этом случае последующее удаление объекта из стека

Вызовет его деструктор. Объект, поля которого в свою очередь являются

Объектами, считается созданным только после создания всех его полей.

Создавая объект, правильно написанный конструктор при неудаче должен

(насколько это возможно) восстановить состояние системы и не оставлять

«полусозданный» объект. Это можно обеспечить путем управления ресурсами

Через инициализацию.

Представьте себе класс X, конструктор которого должен получить два

ресурса: файл file и его блокировку lock. Конструктор может и не получить

Какой-либо из требуемых ресурсов; в этом случае он возбуждает исключение.

Чтобы не усложнять жизни программисту, конструктор класса X не должен







Date: 2015-12-12; view: 388; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию