Ответ 1
Не закрывает приложение, освобождает все объекты напрямую, не вызывая
Free
?
Нет. Экземпляры класса Delphi не собирают мусор, поэтому их нужно вручную уничтожить.
Однако, если вы говорите об исполняемом процессе, то вполне приемлемо не распоряжаться определенными объектами, так как операционная система будет повторно требовать все ресурсы, принадлежащие процессу, когда этот процесс завершается. Поэтому, несмотря на то, что деструкторы Delphi не запускаются, ОС прибирает все, когда процесс завершается. Невозможно протекание каких-либо системных ресурсов после его завершения.
Обратите внимание, что если устройство включено в DLL или пакет, тогда отказ уничтожить все объекты во время доработки приведет к утечке памяти, если эта DLL будет повторно загружена и выгружена в один процесс.
Если вы знаете, что ваш код только когда-либо запускается в исполняемом файле, тогда чувствуйте себя свободным не до объектов Free
во время завершения. Имейте в виду, что если вы используете инструмент обнаружения утечки памяти, то это приведет к тому, что ваш намеренно просочившийся объект будет рассматриваться как утечка памяти. С этим справитесь, позвонив RegisterExpectedMemoryLeak
.
Один последний момент заключается в том, что объект-деструктор иногда делает больше, чем свободную память. Иногда он может сохранять значения в файле настроек или в реестре, например. Естественно, вы не захотите пропустить запуск деструктора для такого объекта.