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


Неконтролируемое программирование


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

UNCHECKED_DEALLOCATION и UNCHECKED_CONVERSION.

generic

type OBJECT is limited private;

type NAME is access OBJECT; procedure UNCHECKED_DEALLOCATION(X : in out NAME):

generic

type SOURCE is limited private;

type TARGET is limited private;

function UNCHECKED_CONVERSION(S : SOURCE) return TARGET;

13.10.1. НЕКОНТРОЛИРУЕМОЕ ОСВОБОЖДЕНИЕ ПАМЯТИ

В результате вызова процедуры, полученной конкретизацией настраиваемой процедуры UNCHECKED_DEALLOCATION, производится неконтролируемое освобождение памяти, занимаемой объектом, указанным значением ссылочного типа. Например:

procedure FREE is new UNCHECKED_DEALLOCATION(имя_типa_oбъeкra, имя_ссылочного_гипа);

Такая процедура FREE дает следующий результат:

а) после выполнения FREE(X) значением Х является

null;

б) если Х уже равно

null,

то FREE(X) не имеет другого результата; -

в) если Х не равно

null,

то FREE(X) обозначает, что указанный значением Х объект не требуется, и поэтому занимаемая им память может использоваться для других целей.

Если Х и Y указывают на один и тот же объект, то после вызова FREE(X) доступ к этому объекту (или попытка доступа к нему) через Y ошибочен; язык не определяет, что происходит в результате такого доступа.

Примечание.

Согласно правилам видимости, настраиваемая процедура UNCHECKED_DEALLOCATION невидима в компилируемом модуле, если только ее имя не указано в спецификаторе совместности этого компилируемого модуля.

Если Х указывает на объект задачного типа, то вызов FREE(X) никак не влияет на задачу, указанную значением этого объекта. Это же относится и к любой подкомпоненте задачного типа объекта X.

Ссылки:

библиотечный модуль 10.1, видимость 8.3, вызов процедуры 6.4, задача 9, задач-ный объект 9.2, значение ссылочного типа

null

3.3, компилируемый модуль 10.1, конкретизация настройки 12.3, настраиваемый модуль 12, настраиваемая процедура 12.1, объект 3.2, ошибочно 1.6, подкомпонента 3.3, применим 10.1.1, процедура 6, спецификатор совместности 10.1.1, ссылочный тип 3.8, указывать 3.8, 9.1.




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