Заменяю Free на FreeAndNil.
Понятно почему?
Обычный сценарий таков:
-- никакой магии и никакого "хоккея" (http://18delphi.blogspot.com/2013/04/blog-post_8.html), но огребаем AV.
Посему - я обычно тупо беру FAR и Alt-F7. И тупо заменяю все Free на FreeAndNil. Хуже - уж точно не становится.
Update. Вот и обоснование - http://www.gunsmoker.ru/2009/04/freeandnil-free.html
И цитата оттуда:
"Заметьте, что речь идёт именно о замене
Почему? Ну причина проста - нет никаких доводов так не делать (пожалуйста, дочитайте до конца). Зато есть доводы против использования
Понятно почему?
Обычный сценарий таков:
TA = class private FField : TComponent; protected procedure DoSomething; procedure DoSomething1; virual; destructor Destroy; override; end; TB = clas(TA) protected procedure DoSomething1; override; end; destructor TA.Destroy; begin FField.Free; DoSomething1; inherited; end; procedure TA.DoSomething; begin if (FField <> nil) then FField.CallSomeMethod; end; procedure TA.DoSomething1; begin end; procedure TB.DoSomething1; begin DoSomething; inherited; end;
-- никакой магии и никакого "хоккея" (http://18delphi.blogspot.com/2013/04/blog-post_8.html), но огребаем AV.
Посему - я обычно тупо беру FAR и Alt-F7. И тупо заменяю все Free на FreeAndNil. Хуже - уж точно не становится.
Update. Вот и обоснование - http://www.gunsmoker.ru/2009/04/freeandnil-free.html
И цитата оттуда:
"Заметьте, что речь идёт именно о замене
Free
на FreeAndNil
везде. Не просто об использовании FreeAndNil
, когда вы хотите проверять ссылку на nil
, а именно - целиком и полностью везде. Т.е. не писать Free
вообще никогда. Да, включая сценарии с локальными переменными.Почему? Ну причина проста - нет никаких доводов так не делать (пожалуйста, дочитайте до конца). Зато есть доводы против использования
Free
в этих ситуациях."
Комментариев нет:
Отправить комментарий