У меня есть объект, анализирующий текстовый файл. Вот моя основная программа:
program main
use Parser_class
implicit none
type(Parser) :: Parser
call Parser%ProcessFile('data.txt')
call Parser%Deallocate
end program main
где определение типа
module Parser_class
type :: Parser
contains
procedure, public :: ProcessFile
procedure, public :: Deallocate
end type Parser
contains
subroutine ProcessFile(self)
...
end subroutine
subroutine Deallocate(self)
class(Parser) :: self
...
end subroutine
end module Parser_class
Я прочитал о ключевом слове final и изменил определение типа на
module Parser_class
type :: Parser
contains
procedure, public :: ProcessFile
final :: Deallocate
end type Parser
contains
subroutine ProcessFile(self)
...
end subroutine
subroutine Deallocate(self)
type(Parser) :: self
...
end subroutine
end module Parser_class
Кроме того, в основной программе у меня больше нет call Parser%Deallocate
. Финализатор не вызывается сейчас в любое время. Я каким-то образом понимаю это, потому что я никогда не уничтожаю и не перезаписываю объект Parser
. Но как я могу это сделать или как правильно справиться с процессом освобождения?
end program
. Программа работает по назначению (просто читает текстовые файлы). Я просто хочу знать, является ли мой способ использованияcall Parser%Deallocate
правильным способом освобождения всех массивов или мне следует сделать это с финализаторами. Дополнительный вопрос заключается в том, когда именно вызываются финализаторы. Не могу предоставить рабочий пример, я новичок в OO Fortran. - person THo   schedule 18.11.2016