View Issue Details

IDProjectCategoryView StatusLast Update
0003455SAS.ПланетаРефакторинг / Refactoringpublic28-04-2020 09:35
Reportervdemidov Assigned To 
PrioritynoneSeveritytrivialReproducibilityN/A
Status newResolutionopen 
Product Version181221 
Summary0003455: Упорядочить удаление объектов по FreeAndNil и просто .Free
DescriptionВ продолжении дискуссии по поводу правильного способа удаления объектов. Нужно ли применять FreeAndNil или достаточно просто вызова .Free

Аргументация за FreeAndNil https://www.gunsmoker.ru/2009/04/freeandnil-free.html
Вот еще ссылочка на дискуссию http://programmingmindstream.blogspot.com/2014/01/freeandnil.htm

Ну а вот аргументация против http://www.nickhodges.com/post/Using-FreeAndNil.aspx
Steps To ReproduceМое мнение использовать простое правило: Для удаления локальных переменных достаточно просто вызвать .Free, если нет обязательной необходимости в занулении. Для полей класса - вызывать FreeAndNil.

Просто формулируется. Просто проверяется. Даже обычным поиском с RegExp по исходникам проекта.

Additional InformationТекущее состояние:

Free для полей класса - 13 вызовов.
FreeAndNil для полей класса - 340 вызовов.
Free для локальных переменных - 401 - вызовов
FreeAndNil для локальных переменных - 52 вызовов

Числа примерные, но видно что в принципе предложенное правило в общем соблюдается.

У Zed есть возражение против излишнего применения FreeAndNil для всех полей класса, но как я понимаю нет возражений, против того что бы для локальных переменных использовать просто .Free
TagsNo tags attached.

Activities

zed

28-04-2020 08:54

manager   ~0019800

Просто в тему: в Delphi 10.4 они изменили сигнатуру FreeAndNil.

было: procedure FreeAndNil(var Obj);

стало: procedure FreeAndNil(const [ref] Obj: TObject); inline;

vdemidov

28-04-2020 09:03

manager   ~0019801

И что это значит? Она перестала занлулять переменную?

zed

28-04-2020 09:06

manager   ~0019802

Не перестала, просто они осознали, что старая версия приводила к багам, т.к. не было проверки типа.

vdemidov

28-04-2020 09:35

manager   ~0019803

Аааа. Точно. И это хорошо. Это правильно :)

Issue History

Date Modified Username Field Change
13-06-2019 07:33 vdemidov New Issue
28-04-2020 08:54 zed Note Added: 0019800
28-04-2020 09:03 vdemidov Note Added: 0019801
28-04-2020 09:06 zed Note Added: 0019802
28-04-2020 09:35 vdemidov Note Added: 0019803
08-08-2025 13:25 zed Category Рефакторинг => Рефакторинг / Refactoring