Как принудительно определить деструктор

Я хотел бы заставить наследующие классы определять деструктор в Fortran >= 2008.

До сих пор я пробовал несколько вариантов:

type, abstract :: parent_class_t
contains
    final, deferred, pass :: cleanup
end type

которые даже не компилируются. Как мне достичь этой цели?


person mcocdawc    schedule 31.01.2020    source источник
comment
Абстрактные типы не могут иметь конечную подпрограмму.   -  person francescalus    schedule 31.01.2020


Ответы (1)


Окончательные привязки НЕ наследуются. Каждый тип может объявить свой собственный. Когда завершается дочерний производный тип, родительская процедура завершения вызывается автоматически. Абстрактные типы не могут иметь финальную подпрограмму, потому что это не имеет смысла.

Стандарт (проект 2018 г.) содержит следующее пояснение:

ПРИМЕЧАНИЕ 7.46 Подпрограммы Final не наследуются через расширение типа и не могут быть переопределены. Конечные подпрограммы родительского типа вызываются после вызова любых дополнительных финальных подпрограмм расширенного типа.

Как отмечает Франческалус, синтаксис таков:

R753 final-procedure-stmt is FINAL [ :: ] final-subroutine-name-list

никакие атрибуты не могут быть указаны.

person Vladimir F    schedule 31.01.2020