に「ゲッター」機能を使用するのは、私が使用している場合は、私は大規模な配列重複のFortran
type, public :: MyObject
implicit none
real*8, allocatable, private :: array1, array2, ... etc
contains
procedure :: get_array1, get_array2, ... etc
end type MyObject
だけでなく、「ゲッター」機能
function get_array1(self) result(array1)
implicit none
class(MyObject), intent(in) :: self
real, dimension(size(self%array1)) :: array1
array1 = self%array1
end function get_array1
の数を含むオブジェクトがあるとしましょう次のようなプログラム内のゲッター関数
somearray = MyObject%get_array1()
次に、値はarray1
で終了します。赤は両方ともMyObject
とsomearray
にあり、無駄です。
call a_subroutine(arg1, arg2, MyObject%get_array1())
または私は新しい配列に割り当てることなく、メインプログラムで直接それを参照する場合:
a_sum = sum(a_vector(:)*MyObject%get_array1())
私はするつもりですが、私は直接、別のサブルーチンにget_array1
の結果を渡す場合最終的にarray1の倍数のコピーがメモリに保存されますか?または、関数の戻り値を含むメモリーは、サブルーチン呼び出しまたは合計後に解放されますか?
一時的な配列が作成されるかどうか、またはそれが必要以上に長生きするかどうかを確認していますか? – francescalus
ごめんなさい。私は一時的な配列が必要以上に長く生きるかどうか尋ねています。 – quixedjetr