Функция завершения Fortran не работает, когда тип является массивом
Недавно я обнаружил серьезную проблему в том, что в некоторых случаях функция финализации не работает.
Описание:
Я определил тип, скажем TYPE(testtype):: T
, в котором используется много указателей и размещаемых массивов. И есть подпрограмма завершения, скажем, final:: de
, Эта функция (de
) работает нормально (я поставил написать в нем, чтобы проверить это). Тем не менее, когда я определяю массив TYPE(testtype),allocatable::T(:)
после того, как я закончу его использовать, функция de
не называется, когда я deallocate(T)
, Здесь я положил на тестовый код. Как можно проверить, subdo1()
работает хорошо (выход "work"
), в то время как финал в subdo2()
не удалось
module test1
implicit none
!--------------
type testtype
real(8)::x
contains
final::de
end type
!--------------
contains
subroutine de(self)
type(testtype)::self
write(*,*)"work"
end subroutine
end module
subroutine subdo1()
use test1
implicit none
class(testtype),pointer::t
allocate(t)
deallocate(t)
end subroutine
subroutine subdo2()
use test1
implicit none
class(testtype),pointer::t(:)
allocate(t(2))
deallocate(t)
end subroutine
program test
implicit none
!call subdo1()
call subdo2()
end program
Я пробовал как gfortran, так и ifort (ifort версия 17.0.0)