Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

Нужно ли делать проверку на Assigned перед вызовом Free или FreeAndNil?

#delphi #объекты


Довольно часто в коде встречается вот такая конструкция:

MyObj: TObject;

..

if Assigned(MyObj) then
  FreeAndNil(MyObj);


или:

if Assigned(MyObj) then
  MyObj.Free;


Логика пишущего код скорее всего такая - "проверим указатель на валидность, перед
тем как к нему обращаться".

Вопрос, нужна ли проверка if Assigned перед вызовом FreeAndNil или Free?
    


Ответы

Ответ 1



Нет, такая проверка не нужна. Процедура Assigned не проверяет валидность указателя, как многие иногда полагают, она лишь проверяет указатель на nil (справка). Метод Free уже содержит проверку на nil в себе (проверяется по исходникам TObject.Free). Процедура FreeAndNil присваивает указателю nil и так же вызывает Free, в котором присутствует эта проверка (также проверяется по исходникам SysUtils.FreeAndNil).

Комментариев нет:

Отправить комментарий