【发布时间】:2019-06-10 07:13:30
【问题描述】:
假设你有一个声明类型dat1,它有一个默认的成员数。根据运行时间,这个dat1 可能会也可能不会被其他类型扩展。这很容易,因为您可以使用extends 功能。但是,如果您有一个 dat1 数组,并且该数组的某些元素可能希望或可能不希望继承另一种类型 - 如何最合理地完成此操作。
我有以下例子:
type dat1
real :: x(3)
type(dat2), allocatable :: rnd
type(dat1), pointer :: next => dat1
end dat1
现在我使用链表来执行此操作。我的问题基本上是是否将第二种类型rnd 声明为可分配的正确方法,然后只要节点请求它就分配它。
另一种选择是将其声明为指针,即type(dat2), allocatable :: rnd,尽管 Fortran 与指针与可分配(如显式/隐式释放、连续内存等)存在常见差异,但现在是否有任何显着差异。
请注意,无论如何,每个dat1 节点都将始终附加0 或1 个rnd 类型。
我正在考虑在运行时检查是否分配了 rnd 或是否关联指针。
【问题讨论】:
标签: pointers fortran dynamic-memory-allocation intel-fortran