Fortran容器类会自动调用包含对象的析构函数吗?

时间:2018-04-06 03:17:56

标签: oop fortran destructor

假设我有以下包含一些眼镜的盒子类:

TYPE :: box_class
   TYPE(glass_class) :: cup1
   TYPE(glass_class) :: cup2
END TYPE

玻璃类有析构函数:

TYPE:: glass_class
  CONTAINS
   FINAL :: glass_destructor
END TYPE

当我的box对象超出范围时会自动调用glass_destructor还是需要在glass_destructor析构函数中手动调用box

2 个答案:

答案 0 :(得分:4)

派生类型glass_class是可终结的,因为它有一个最终子例程。派生类型box_class即使没有最终子例程也可以最终化,因为可终结的组件(非指针和不可分配)。

现在,当type(box_class)的对象完成后,我们将按照最终确定流程(F2008,4.5.6.2)进行操作:

  • 没有调用子程序来完成框对象;
  • 以某些与处理器相关的顺序调用cup的最终子例程;
  • 不存在父最终子例程。

总结:是的,如果你的盒子要完成,那么杯子将通过它完成。你不需要做更多的事情来明确这一点。

答案 1 :(得分:2)

这是最终确定的全部内容,它是自动的。是的,它们将被调用,因为它们超出范围的方式与调用父最终过程时的范围相同。

如果你有一个指针组件,你可能需要一个显式的deallocate,但即使这样,最后的程序也将通过deallocation自动调用。