#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).
Комментариев нет:
Отправить комментарий