Ада-95. Компилятор GNAT
66ac8edd

Контролируемые или не контролируемые?


Когда главный тип абстракции является производным от Ada.Finalization.Controlled, то вызовы Initialize, Adjust и Finalize

автоматически выполняются компилятором (так указывается в руководстве по языку).

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

Это полезно при дублировании объекта: две копии могут быть сделаны независимыми.

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

Действительно, как только главный тип абстракции описан как контролируемый, то программист обязан заботиться о контролируемой обработке для каждого потомка.

Таким образом, если потоммок добавляет какое-либо расширение, то унаследованные операции Initialize, Adjust и Finalize

не имеют никакого представления о таком расширении.

Следовательно, вы обязаны переопределять эти операции для потомков вашей абстракции.



Содержание раздела