Механизм освобождения
Механизм освобождения
Другой важной процедурой класса MEMORY является dispose (не путайте с тезкой Pascal, которая освобождает память). Она связана с важной практической проблемой, иногда называемой финалом или окончательным завершением (finalization). Если сборщик мусора утилизирует объект, связанный с внешними ресурсами, вы можете пожелать включить в его спецификацию некоторое дополнительное действие, такое как освобождение ресурсов, выполняемое параллельно с утилизацией. Типичный пример - класс FILE, экземпляр которого представляет файлы операционной системы. Желательно иметь возможность в случае утилизации недостижимого экземпляра класса FILE вызвать некоторую процедуру, закрывающую соответствующий физический файл.
Обобщая сказанное, рассмотрим процедуру dispose, выполняющую во время утилизации необходимые объекту операции. Это могут быть не только операции по освобождению ресурсов, но и любые операции, определяемые спецификацией класса.
При ручном управлении памятью проблем не возникает: достаточно включить вызов dispose до вызова reclaim. Деструктор класса в С++ включает в себя две операции dispose и reclaim. Однако при наличии сборщика мусора приложение напрямую не контролирует момент утилизации объекта, поэтому невозможно вставить dispose в нужное место.
Решение проблемы использует мощь объектной технологии и, в частности, наследование и переопределение. (Эта техника изучается в последующих лекциях, но ее применение здесь достаточно просто и понятно без детального ознакомления.) Класс MEMORY включает процедуру dispose, в теле которой никакие действия не выполняются:
dispose is
- Действия, которые следует выполнить в случае утилизации;
- по умолчанию действия отсутствуют.
- Вызывается автоматически сборщиком мусора.
do
end
Тогда любой класс, требующий специальных действий всякий раз, когда сборщик утилизирует один из его экземпляров, должен переопределить процедуру dispose так, чтобы она выполняла эти действия. Например, представим, что класс FILE имеет логический атрибут opened и процедуру close. Он может переопределить dispose следующим образом:
dispose is
- Действия, которые следует выполнить в случае утилизации:
- закрыть связанный файл, если он открыт.
- Вызывается автоматически сборщиком мусора.
do
if opened then
close
end
end
Комментарии описывают используемое правило: при утилизации объекта вызывается dispose - либо изначально пустую процедуру (что далеко не самый общий случай), либо версию, переопределенную в классе, представляющего потомка MEMORY.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Старый механизм BH
Старый механизм BH Хотя старый интерфейс BH, к счастью, уже отсутствует в ядрах серии 2.6, тем не менее им пользовались очень долгое время — с первых версий ядра. Учитывая, что этому интерфейсу удалось продержаться очень долго, он, конечно, представляет собой историческую
Операции освобождения
Операции освобождения int sem_post(sem_t* sem);Эта операция увеличивает на единицу (инкремент) внутренний счетчик семафора, и в этом она диаметрально противоположна операции блокировки. Если перед этим значение счетчика семафора было равно 0, то один из потоков, ожидающих
Страничный механизм
Страничный механизм При реализации виртуальной памяти, основанной только на сегментации, весь сегмент целиком может либо присутствовать в оперативной памяти, либо отсутствовать (точнее, находиться во вторичной памяти или в исполняемом файле процесса). Поскольку размер
8.9.3 Механизм RIP версии 1
8.9.3 Механизм RIP версии 1 Рассмотрим формальные этапы маршрутизации в RIP версии 1. Предположим, что в таблице маршрутизации уже есть сведения о нескольких расстояниях. Затем, когда от соседа прибывает информация об изменениях, маршрутизатор перепроверяет свою таблицу и
1.2.3. Поисковый механизм
1.2.3. Поисковый механизм Начиная выполнять поиск с помощью Яндекса, мы может в явном виде указать, в какой базе (коллекции документов, типе документов) следует выполнять поиск. Если мы не указываем этого, то на основе анализа запроса Яндекс самостоятельно делает допущение о
51. Деструкторы, функции освобождения ресурсов и обмена не ошибаются
51. Деструкторы, функции освобождения ресурсов и обмена не ошибаются РезюмеВсе запуски этих функций должны быть успешными. Никогда не позволяйте ошибке выйти за пределы деструктора, функции освобождения ресурса (например, оператора delete) или функции обмена. В частности,
60. Избегайте выделения и освобождения памяти в разных модулях
60. Избегайте выделения и освобождения памяти в разных модулях РезюмеЗолотое правило программиста — положи, где взял. Выделение памяти в одном модуле, а освобождение в другом делает программу более хрупкой, создавая тонкую дальнюю зависимость между этими модулями. Такие
4.2.5. Значение освобождения
4.2.5. Значение освобождения В начале данной книги упоминалась ссылка на Дзэн об "особой передаче знаний вне священного писания". Не следует рассматривать ее как экзотическую, использованную ради стилистического эффекта. Основные понятия Unix всегда отличались свободной,
4.2.5. Значение освобождения
4.2.5. Значение освобождения В начале данной книги упоминалась ссылка на Дзэн об "особой передаче знаний вне священного писания". Не следует рассматривать ее как экзотическую, использованную ради стилистического эффекта. Основные понятия Unix всегда отличались свободной,
Формализованный шаблон освобождения ресурсов
Формализованный шаблон освобождения ресурсов Текущая реализация MyResourceWrapper работает вполне приемлемо, но некоторые недостатки она все же имеет. Во-первых, каждому из методов Finalize() и Dispose() приходится очищать одни и те же неуправляемые ресурсы. Это, конечно, ведет к
Механизм UAC
Механизм UAC Существует несколько возможностей настройки работы механизма UAC операционной системы Windows Vista. Все они основаны на использовании параметров REG_DWORD-типа ветви реестра HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem.• ConsentPromptBehaviorAdmin – позволяет определить режим
Механизм предвыборки
Механизм предвыборки Механизм предвыборки позволяет ускорить загрузку часто используемых при работе пользователя в операционной системе программ. Это достигается предварительным помещением в оперативную память данных таких программ. При этом механизм предвыборки
Механизм исключений
Механизм исключений Из предшествующего анализа следует механизм исключений, наилучшим образом соответствующий ОО-подходу и идеям Проектирования по Контракту.Для обеспечения основных свойств введем в язык два новых ключевых слова. Для случаев, в которых необходим
Механизм решения
Механизм решения И снова запись механизма решения напрямую вытекает из анализа поставленной проблемы. Введем новую форму присваивания, назвав ее попыткой присваивания (assignment attempt):target ?= sourceЗнак вопроса указывает на предварительный характер операции. Пусть сущность target
Статический механизм
Статический механизм Устранить последнее неясности в понимании закрепленного объявления поможет следующее замечание: это чисто статический механизм, не предполагающий никаких изменений объектов в период выполнения. Все ограничения могут быть проверены в период