Как заставить определение деструктора - PullRequest
2 голосов
/ 31 января 2020

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

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

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

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

1 Ответ

1 голос
/ 31 января 2020

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

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

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

Как отмечает francescalus, синтаксис:

R753 final- процедура-stmt is FINAL [::] final-subroutine-name-list

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

...