Функции Фортрана с указателем приводят к нормальному назначению - PullRequest
0 голосов
/ 30 декабря 2018

После некоторого обсуждения вопроса, найденного здесь Правильное выполнение процедуры Final в 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) является законным, оно означает что-то другое.

Что подразумевается под обычным назначением по сравнению с назначением указателя?

Когда имеет смысл использовать одно или другое назначение?

1 Ответ

0 голосов
/ 30 декабря 2018

Обычное присваивание

test = pointer_result()

означает, что значение текущей цели test будет перезаписано значением, на которое указывает результирующий указатель.Если test указывает на какой-то недопустимый адрес (не определен или равен нулю), программа завершится сбоем или выдаст неопределенные результаты.У анонимной цели, выделенной функцией, больше не будет указателя на нее, и память будет просачиваться.

Едва ли это можно использовать, но это может произойти, когда кто-то делает опечатку и пишет= вместо =>.Это очень легко сделать, и несколько руководств по стилю рекомендуют никогда использовать функции указателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...