Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop Fortran容器类是否会自动调用包含的对象';什么是析构函数?_Oop_Fortran_Destructor - Fatal编程技术网

Oop Fortran容器类是否会自动调用包含的对象';什么是析构函数?

Oop Fortran容器类是否会自动调用包含的对象';什么是析构函数?,oop,fortran,destructor,Oop,Fortran,Destructor,假设我有一个盒子类,里面有一些玻璃杯: TYPE :: box_class TYPE(glass_class) :: cup1 TYPE(glass_class) :: cup2 END TYPE 如果glass类具有析构函数: TYPE:: glass_class CONTAINS FINAL :: glass_destructor END TYPE 当我的box对象超出范围时,将自动调用glass\u析构函数,或者我是否需要在box析构函数中手动调用glass\u析

假设我有一个盒子类,里面有一些玻璃杯:

TYPE :: box_class
   TYPE(glass_class) :: cup1
   TYPE(glass_class) :: cup2
END TYPE
如果glass类具有析构函数:

TYPE:: glass_class
  CONTAINS
   FINAL :: glass_destructor
END TYPE

当我的
box
对象超出范围时,将自动调用
glass\u析构函数
,或者我是否需要在
box
析构函数中手动调用
glass\u析构函数

这是整个终结点,它是自动的。是的,将调用它们,因为它们超出范围,与父final过程超出范围时调用它的方式相同


如果有指针组件,则可能需要显式释放,但即使这样,最终过程也会自动调用释放。

派生类型
glass\u类
是可终结的,因为它有最终的子例程。派生类型
box\u类
即使没有最终的子例程也可以终止,因为有可终止的组件(非指针和非可分配)

现在,当一个
类型(box_类)
的对象被最终确定时,我们遵循最终确定过程(F2008,4.5.6.2):

  • 不调用任何子例程来完成box对象
  • cups的最终子例程以某种处理器相关顺序调用
  • 不存在父最终子例程
总结:是的,如果你的盒子要定稿,那么杯子将通过这个定稿。你不需要做更多的事情来明确这一点