データをポインターとして返すサブルーチンを作成しようとしています。
私はそのようなものが欲しい:
subroutine f(p)
type(tra), pointer p
type(tra), target :: instance
p=>instance
do_work(instance)
end subroutine
厳密に言えば、C++ の "new" 演算子のアナログを実装したいと考えています。
次に、次のようなサブルーチンを使用したいと思います。
subroutine other
type(tra), pointer :: p1,p2
call f(p1)
call f(p2)
end subroutine
f が終了した後に f 内の「インスタンス」が破棄され、次の f の呼び出しでメモリ内の同じ場所に「インスタンス」が再度作成されるため、上記のコードは機能しない可能性があります。
p1
特に、同じオブジェクトをp2
指していることがわかりましたが、これはコンパイラに依存していると思います。本当ですか?
可能な解決策は次のとおりだと思います。
subroutine f(p)
type(tra), pointer p
type(tra), allocatable, target :: instance(:)
p=>instance(1)
do_work(instance(1))
end subroutine
これは物事を行う「公式」の方法ですか?