Довольно часто в коде встречается вот такая конструкция:
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).
Комментариев нет:
Отправить комментарий