FINAL 属性のサブルーチンは、TYPE 解放のときに自動実行されます。
Fortran2003 では、オブジェクト指向の機能が取り入れられたので、スカラー型の変数も ALLOCATE で動的に確保できるようになりました。ここでは動的に確保されたスカラー構造体 tt 内部に、さらに動的に配列を確保します。この動的配列を tt が解放される時に実行される FINALIZATION 処理で解放するようにしてみます。
ソースコード
MODULE m_test IMPLICIT NONE TYPE :: t_test INTEGER, POINTER :: i(:) CONTAINS PROCEDURE :: calc_test PROCEDURE :: alloc_test PROCEDURE :: init_test FINAL :: dealloc_test END TYPE t_test CONTAINS SUBROUTINE alloc_test(this, n) CLASS (t_test), INTENT(IN) :: this INTEGER, INTENT(IN) :: n ALLOCATE( this%i(n) ) RETURN END SUBROUTINE alloc_test SUBROUTINE dealloc_test(this) TYPE (t_test), INTENT(IN) :: this PRINT *, '=========== deallocated ==============' DEALLOCATE(this%i) RETURN END SUBROUTINE dealloc_test SUBROUTINE init_test(this) CLASS (t_test), INTENT(IN) :: this INTEGER :: k this%i = [(k, k = 1, SIZE(this%i) )] RETURN END SUBROUTINE init_test INTEGER FUNCTION calc_test(this) CLASS (t_test), INTENT(IN) :: this calc_test = SUM(this%i) RETURN END FUNCTION calc_test END MODULE m_test PROGRAM test USE m_test TYPE (t_test), ALLOCATABLE :: tt ALLOCATE(tt) CALL tt%alloc_test(10**6) CALL tt%init_test() PRINT *, tt%calc_test() PAUSE DEALLOCATE(tt) PAUSE STOP END PROGRAM test