指向多态对象的指针的初始化

Initialization of a pointer to polymorphic object

假设我有一个指向多态对象的指针:

TYPE, ABSTRACT:: ab
ENT TYPE

TYPE, EXTENDS(ab):: co
  INTEGER:: i
ENT TYPE

Class(ab), POINTER:: foo

如何在代码的可执行部分将 foo 指向的对象初始化为 co 对象?我在想

foo => co(1)  ! WRONG

但这是错误的。

指针只能用具有 save 属性或 null() 的目标初始化。如果你指的是声明部分编译时的初始化。

在代码的可执行部分你当然可以让指针指向一个对象。但是您需要一个具有 target 属性的实际对象,或者您需要使用 allocate() 语句创建一个匿名目标。

co(1)是表达式或表达式的值结果。你不能指向它,它没有指针属性。您可以使用此值分配一个匿名目标

allocate(foo, source=co(1))

考虑使用 allocatable 而不是 pointer,它们应该是首选。如果你可以使用allocatable,它就像

一样简单
foo = co(1)

感谢作业中的自动(重新)分配。