Fortran >= 2008 で継承クラスに強制的にデストラクタを定義させたいと考えています。
これまでのところ、次のいくつかのバリエーションを試しました。
type, abstract :: parent_class_t
contains
final, deferred, pass :: cleanup
end type
コンパイルさえしません。どうすればその目標を達成できますか?
Fortran >= 2008 で継承クラスに強制的にデストラクタを定義させたいと考えています。
これまでのところ、次のいくつかのバリエーションを試しました。
type, abstract :: parent_class_t
contains
final, deferred, pass :: cleanup
end type
コンパイルさえしません。どうすればその目標を達成できますか?
最終バインディングは継承されません。すべての型は独自に宣言できます。子の派生型がファイナライズされると、親のファイナライズ プロシージャが自動的に呼び出されます。意味がないため、抽象型は final サブルーチンを持つことができません。
標準 (2018 ドラフト) には、次の説明が含まれています。
注 7.46 Final サブルーチンは型拡張によって継承されず、オーバーライドできません。親型の最終サブルーチンは、拡張型の追加の最終サブルーチンが呼び出された後に呼び出されます。
francescalus が指摘しているように、構文は次のとおりです。
R753 final-procedure-stmt is FINAL
[ :: ] final-subroutine-name-list
属性は指定できません。