我正在尝试创建一个将数据作为指针返回的子例程:
我想要这样的东西:
subroutine f(p)
type(tra), pointer p
type(tra), target :: instance
p=>instance
do_work(instance)
end subroutine
严格来说,我想实现 C++“新”运算符的类似物。
然后我想使用如下这样的子程序:
subroutine other
type(tra), pointer :: p1,p2
call f(p1)
call f(p2)
end subroutine
上面的代码可能不起作用,因为我认为 f 中的“实例”在 f 退出后被销毁,并且 f 的下一次调用在内存中的同一位置再次创建“实例”。
特别是我发现 withp1
并p2
指向相同的对象,但我想这是依赖于编译器的。是真的吗?
我认为一个可能的解决方案是:
subroutine f(p)
type(tra), pointer p
type(tra), allocatable, target :: instance(:)
p=>instance(1)
do_work(instance(1))
end subroutine
这是“官方”的做事方式吗?