假设我有以下包含一些眼镜的盒子类:
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
?
答案 0 :(得分:4)
派生类型glass_class
是可终结的,因为它有一个最终子例程。派生类型box_class
即使没有最终子例程也可以最终化,因为可终结的组件(非指针和不可分配)。
现在,当type(box_class)
的对象完成后,我们将按照最终确定流程(F2008,4.5.6.2)进行操作:
总结:是的,如果你的盒子要完成,那么杯子将通过它完成。你不需要做更多的事情来明确这一点。
答案 1 :(得分:2)
这是最终确定的全部内容,它是自动的。是的,它们将被调用,因为它们超出范围的方式与调用父最终过程时的范围相同。
如果你有一个指针组件,你可能需要一个显式的deallocate,但即使这样,最后的程序也将通过deallocation自动调用。