13.10. НЕКОНТРОЛИРУЕМОЕ ПРОГРАММИРОВАНИЕ

Для неконтролируемого освобождения памяти и неконтролируемого преобразования типов используются предопределенные настраиваемые библиотечные подпрограммы: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.

13.10.2. НЕКОНТРОЛИРУЕМОЕ ПРЕОБРАЗОВАНИЕ ТИПА

Неконтролируемое преобразование типа можно осуществить вызовом функции, полученной конкретизацией настраиваемой функции UNCHECKED_CONVERSION.

Неконтролируемое преобразование типа состоит в возврате значения параметра в качестве значения целевого типа, т.е. поразрядное изображение, определяющее исходное значение, возвращается неизменным, как поразрядное изображение значения целевого типа. Реализация может наложить ограничения на неконтролирумое преобразование типа, например ограничения, зависящие от предполагаемых размеров объектов исходного и целевого типов. Такие ограничения должны быть отражены в приложении F.

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

Примечание. Согласно правилам видимости, настраиваемая функция UNCHECKED_CONVERSION невидима в компилируемом модуле, если она не упомянута в спецификаторе совместности этого компилируемого модуля.

Ссылки: компилируемый модуль 10.1, конкретизация 12.3, настраиваемая функция 12.1, ошибочный 1.6, параметр подпрограммы 6.2, применим 10.1.1, спецификатор совместности 10.1.1, тип 3.3.