Fortran 派生型があるとします。
type :: atype
integer :: n
integer :: a(10)
integer, allocatable :: b(:)
end type
このタイプのインスタンスが2つあります
type(atype) :: t1, t2
次の割り当てを行うと、正確にはどうなりますか?
t2 = t1
派生型変数の意味のコピーを正しく作成したいので、これに興味があります。スカラー コンポーネントは等しくなければならず、配列コンポーネントの各要素は等しくなければならず、割付け可能な配列は同じ割り当てサイズを持ち、要素は等しくなければなりません。現時点では、コンポーネントを正しくコピーして割り当てるサブルーチンを作成するだけです。
subroutine copy_atype(from, to)
type(atype) :: from, to
to%n = from%n
to%a = from%a
if (allocated(to%b)) deallocate(to%b)
if (allocated(from%b) then
allocate(to%b(size(from%b)))
to%b = from%b
end if
end subroutine
標準の適切なセクションへの指示をいただければ幸いです。
gfortran 4.7 を使用しています。