我正在尝试实现一个简单的终结器,但我什至无法编译这个示例:
MODULE m
TYPE :: t1
REAL a,b
END TYPE
TYPE, EXTENDS(t1) :: t2
REAL,POINTER :: c(:),d(:)
CONTAINS
FINAL :: t2f
END TYPE
TYPE, EXTENDS(t2) :: t3
REAL,POINTER :: e
CONTAINS
FINAL :: t3f
END TYPE
CONTAINS
SUBROUTINE t2f(x) ! Finalizer for TYPE(t2)'s extra components
TYPE(t2) :: x
print *, 'entering t2f'
IF (ASSOCIATED(x%c)) then
print *, ' c allocated, cleaning up'
DEALLOCATE(x%c)
end if
IF (ASSOCIATED(x%d)) then
print *, ' d allocated, cleaning up'
DEALLOCATE(x%d)
end if
END SUBROUTINE
SUBROUTINE t3f(y) ! Finalizer for TYPE(t3)'s extra components
TYPE(t3) :: y
print *, 'entering t3f'
IF (ASSOCIATED(y%e)) then
print *, ' e allocated, cleanup up'
DEALLOCATE(y%e)
end if
END SUBROUTINE
END MODULE
使用 GNU Fortran (GCC) 4.8.2 20131212 (Red Hat 4.8.2-7) 给我这个错误输出:
$ gfortran -c m_example.f03 m_example.f03:5.26:
TYPE, EXTENDS(t1) :: t2 1 错误:(1) 处的最终确定尚未实现 m_example.f03:10.26:
TYPE, EXTENDS(t2) :: t3 1 错误:(1) 处的最终确定尚未实现
这是一个错误,是否意味着终结器尚未在 gfortran 中实现,或者我做错了什么?