×
Namespaces

Variants
Actions
(Redirected from Сброс(Leave))

Сброс (Leave)

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

Статья
Перевод:
Оригинал: Leave
Den123
Последнее редактирование: hamishwillee (09 Dec 2011)

Вместо обычных исключений C++, которые во время разработки Symbian ОС не были стандартной частью языка, используется собственный "облегченный" механизм обработки исключительных ситуаций под названием сброс (leave). Сброс может произойти в результате ошибочного условия или незапланированного события, например в результате нехватки памяти или места на диске необходимого для завершения запроса. Сброс "раскручивает" стек вызовов и "проталкивает"(propagate) ошибку в точку вызывающего кода которая содержит ловушку (TRAP) где она может быть обработана.

Для реализации этого механизма используются инструкции jump - соответственно могут быть потеряны локальные ресурсы (динамическая память, дескрипторы открытых ресурсов и т.д.). Для предотвращения утечки ресурсов разработчики используют стек очистки (cleanup stack). Стек очистки производит освобождение выделенных ресурсов при возникновении сброса. Схема работы следующая:

  • создается ловушка (TRAP)
  • указатели на выделенные ресурсы помещаются в стек очистки
  • выполняется фрагмент кода, который может привести к возникновению сброса

Если происходит сброс - управление передается в ловушку, при этом стек очистки освобождает выделенные ресурсы указатели на которые содержит. Если же исключения не было - указатели на объекты просто удаляются из стека.

Следует отметить - есть некоторые места в исходном коде в которых НЕ ДОЛЖЕН возникнуть сброс, конкретно в С++ конструкторах и деструкторах. Для предотвращения сброса в конструкторах в программах для Symbian ОС используется механизм двухфазного конструирования.

This page was last modified on 9 December 2011, at 02:31.
87 page views in the last 30 days.
×