Страницы

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

четверг, 21 февраля 2019 г.

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

Довольно часто в коде встречается вот такая конструкция:
MyObj: TObject;
..
if Assigned(MyObj) then FreeAndNil(MyObj);
или:
if Assigned(MyObj) then MyObj.Free;
Логика пишущего код скорее всего такая - "проверим указатель на валидность, перед тем как к нему обращаться".
Вопрос, нужна ли проверка if Assigned перед вызовом FreeAndNil или Free?


Ответ

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

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

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