Студопедия
rus | ua | other

Home Random lecture






Обработка ошибок при работе с динамическими объектами.


Date: 2015-10-07; view: 381.


 

HeapError – системная переменная, имеющая указательный тип pointer. Она указывает на функцию:

HeapError := @HeapFunc;

Function HeapFunc (Size: word): integer;

Данная функция вызывается каждый раз, когда работают процедуры генерирования динамического объекта, и когда не может быть выполнен запрос на распределение объекта. Здесь Size указывает на то, какой блок памяти не может разместиться в динамической памяти. В качестве результата функция возвращает значения 0, 1 или 2. Если функция возвращает значение 0, то осуществляется аварийный останов. Если значение 1, то при выполнении процедуры New (P) ссылка на объект принимает значение константы. Если значение 2, то вызов повторяется.

{$F+}

Function HeapFunc (Size: word): integer;

begin

HeapFunc:=1;

end;

{$F-}

New (P);

if P = nil then <обработка исключительной ситуации>

else <нормальный ход программы>

Таким образом, если мы имеем расширенные процедуры генерирования объекта (New (<>,<>)), необходимо учитывать следующее: когда начинает выполняться тело конструктора, то при выполнении алгоритма может потребоваться дополнительная память. В этом случае мы должны сделать откат, т.е. отменить все проделанные распределения в конструкторе и, в завершение, освободить экземпляр типа объекта. Ссылка должна получить значение константы. Для выполнения отката используется стандартная процедура Fail, располагающаяся в конструкторе. Вызов этой процедуры освобождает динамический экземпляр, который был размещен в памяти до входа в конструктор, и возвращает в ссылке значение nil.

Нехватка памяти может иметь место и для статических объектов с динамическими полями. Так как объект статический, то необходимо передать сигнал о невозможности распределения. В этом случае имя конструктора используется как логическая функция (если значение False, то распределение невозможно).

 


<== previous lecture | next lecture ==>
Динамические объекты. Деструкторы. | СД типа дерево.
lektsiopedia.org - 2013 год. | Page generation: 0.293 s.