Даже если кажется, не будет сильно отличаться, чем Free, это поможет вам много позже во время охоты на ошибки кода.
Просто подумайте, что произойдет, если вы НЕ используете FreeAndNil, а затем где-то в вашем коде вы получаете доступ к свободному объекту. Если вам повезет, ваша программа потерпит крах, когда она вернется домой (да, это крушение - «хороший» крушение). Если вам немного не повезло, он потерпит крах на компьютере клиента. Тогда начинается настоящая боль!
Как уже указывалось, сам FreeAndNil неплох. Функция FreeAndNil не нарушена/устарела или что-то вроде этого, и это не повредит ваш код. Некоторые утверждают, что использование FreeAndNil может привести или указать недостаток дизайна.
Я использую FreeAndNil EVEN для локальной переменной. Использование его в локальной переменной кажется POINTLESS, так как переменная исчезает, как только вы выходите из процедуры. Однако это хорошая практика, которая будет стоить вам всего лишь нескольких лишних байтов. Подумайте, что позже вы можете добавить больше кода в конце процедуры, ПОСЛЕ того, где вы освободили объект, код, который (очевидно, случайно) попытается получить доступ к освобожденному объекту. Если объектом был NIL, BABUM, мгновенный AV (example).
Примечание. Некоторые люди могут сказать, что никогда не обращались к свободному объекту (в основном это означает, что они никогда не ошибаются), поэтому в этом случае им не нужен FreeAndNil. Ну, я не робот. Я ошибаюсь.
Некоторые консервативные люди могут сказать, что этот простой вызов избавит от ресурсов ОЗУ и ЦП. Я никогда не скажу, что сохранение памяти/процессора плохое. Мне нравится доставлять небольшие/быстрые/монолитные приложения тоже!Но я не думаю, что удаление с помощью FreeAndNil будет тратить больше нескольких байтов и циклов процессора (буквально немного). Это не будет иметь особого значения в повседневной жизни, особенно если вы считаете, что один графический ресурс, такой как символ TButton или значок вашей программы, может занимать 50-300 КБ, а ваша программа может иметь десятки из них.
Pros
Mason Wheeler уже указывает на статью, которая показывает метод «ленивым создания», который использует FreeAndNil, что все мы использовали один день: http://tech.turbu-rpg.com/106/delphi-memory-management-made-simple
Против
Allen Bauer показывает здесь пример о том, как с помощью FreeAndNil в отдельном случае (деструктор визуального компонента) и быть действительно плохим: http://blogs.embarcadero.com/abauer/2010/02/16/38916
Аллен утверждает, что FreeAndNil следует заменить лучшими методами. Например, с FastMM. Тем не менее, вот простой фрагмент кода, в котором FastMM сбой, в то время как FreeAndNil сохраняет день: http://codeverge.com/embarcadero.delphi.rtl/freeandnil-to-use-or-not-to-use/1067733
Поскольку есть оба аргумента pro и против FreeAndNil, вам решать, нравится это или нет.
Расширенное обсуждение здесь: https://forums.embarcadero.com/thread.jspa?threadID=33112 –
@Sertac поток, как и многие другие, исчез – mjn
Новые обсуждения на нетехнических [здесь] (https: //forums.embarcadero.com/thread.jspa?threadID=65321&tstart=15) и [здесь] (https://forums.embarcadero.com/thread.jspa?threadID=63906&tstart=0) – mjn