在对这里Correct execution of Final routine in Fortran的问题进行了讨论之后 我认为了解带指针结果的函数何时适合与常规或指针分配一起使用将很有用。例如,鉴于此简单功能
function pointer_result(this)
implicit none
type(test_type),intent(in) pointer :: this
type(test_type), pointer :: pointer_result
allocate(pointer_result)
end function
我通常会使用test=>pointer_result(test)
属性,其中test
是用pointer
属性声明的。虽然常规分配test=pointer_result(test)
是合法的,但这意味着有所不同。
与指针分配相比,普通分配意味着什么?
何时使用一个或另一个分配有意义?
答案 0 :(得分:3)
常规作业
test = pointer_result()
表示test
当前目标的值将被结果指针指向的值覆盖。如果test
指向某个无效地址(未定义或为null),程序将崩溃或产生未定义的结果。该函数分配的匿名目标将不再有指向它的指针,并且内存将被泄漏。
几乎没有合法用途,但是当人们打错字并写=
而不是=>
时,很可能会发生这种情况。这是一种非常容易制作的方法,并且一些样式指南建议从不使用指针函数。