Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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; Нарушение авторских прав |