Справочное руководство по языку Ада-83


Генераторы - часть 2


е. пока он может быть обозначен некоторым именем. Кроме того, если объект или одна из его подкомпонент принадлежит задачному типу, он считается доступным, пока не завершена эта задача. Реализация может (но не обязана) освобождать память, занятую объектом, созданным генератором, как только этот объект становится недоступным.

В случаях когда требуется более точное управление распределением памяти под указанные значениями ссылочного типа объекты, оно может быть обеспечено следующими средствами:

а. Общий объем памяти, доступный для набора объектов ссылочного типа, может быть установлен с помощью спецификатора длины (см. 13.2).

б. Прагма CONTROLLED указывает реализации на то, что для объектов, указанных значениями ссылочного типа, автоматическое возвращение памяти производиться не должно, исключая случаи выхода из самого вложенного оператора блока, тела подпрограммы или тела задачи, содержащих описание этого ссылочного типа, или выхода из главной программы.

pragma

CONTROLLED (простое-имя-ссылочного-типа);

Эта прагма для данного ссылочного типа допустима в тех же местах, что и спецификатор представления этого типа (см. 13.1).

в. Явного освобождения памяти, занимаемой объектом, указанным ссылочным значением, можно достичь вызовом процедуры, полученной настройкой предопределенной библиотечной процедуры UNCHECKED_DEALLOCATION (см. 13.10.1). /

При исчерпании памяти генератором возбуждается исключение STORAGE_ERROR. Заметим также, что исключение CONSTRAINT_ERROR может быть возбуждено при вычислении квалифицированного выражения, во время предвыполнения указания подтипа или при инициализации.

Примеры (ссылочных типов, описанных в разд. 3.8):

new CELL'(0, null, null) -- явная инициализация new CELL'(VALUE => 0, SUCC => null, PRED => null) -- явная инициализация new CELL -- нет инициализации

new MATRIX(1 .. 10, 1 .. 20) -- даны только границы new MATRlX'(1 .. 10 => (1 .. 20 => 0.0)) -— явная инициализация

new BUFFER(100) -- дан только дискриминант new BUFPER'(SIZE => 80, POS => 0, VALUE => (1 .. 80 => 'А')) -- явная инициализация




Начало  Назад  Вперед