Скажем, у меня есть производный тип от Фортрана
type :: atype
integer :: n
integer :: a(10)
integer, allocatable :: b(:)
end type
и у меня есть два экземпляра этого типа
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.