Hola,
Todo se resume en quién es el "dueño" ("owner") del formulario, esto es, quién es el encargado de liberarlo, cuando a su vez sea liberado. Si asignas como dueño de un formulario a otro, como cuando creas un formulario usando "Self" (otro formulario) como "dueño", dicho formulario será liberado automáticamente, cuando el formulario "dueño" sea liberado a su vez.
Si sigues el método "Application.CreateForm()", verás que al formulario que se crea se le asigna como dueño el mismo objeto "Application", de modo que el formulario será liberado, automáticamente, cuando el objeto "Application" sea liberado a su vez. Piensa que incluso puedes crear un formulario de este modo:
Código Delphi
[-]
with TSampleForm.Create(nil) do
begin
try
ShowModal();
finally
Free();
end;
end;
Con "nil" no estás asignando ningún dueño para el formulario "TSampleForm", de modo que en este caso hemos de ser nosotros mismos quienes nos encargamos de liberarlo, y así lo hacemos más abajo, como puedes ver.