Как сказал Serta c, это происходит потому, что IDE Delphi ожидает, что формы будут созданы в начале вашего приложения и сохраняться там, пока приложение живо. То есть, когда вы создаете новую форму, в единице формы создается глобальная переменная для этой формы. Эта переменная инициализируется новой формой в главном блоке проекта с использованием Application.CreateForm(...)
. Там нет явных вызовов бесплатно, эти формы уничтожаются в конце приложения во время TApplication.Destroy. С действием по умолчанию caHide это работает просто отлично - вы получаете действительный экземпляр формы в начале, и этот экземпляр остается действительным до конца приложения. Если бы действием по умолчанию было caFree
, содержимое глобальной переменной было бы недействительным при первом закрытии формы (поскольку нет способа узнать, какое место должно быть установлено на nil
), и вы получили бы указатель, который выглядит допустимо, но может вызвать различные проблемы (EAccessViolation, если вам повезет, "случайная" перезапись памяти, если нет) при использовании.