Hombre, forma correcta de crearlos es como dices, con una particularidad
Si las creas como:
Código Delphi
[-]Form1 := TForm1.Create(Owner);
Es el propio componente propietario el responsable de eliminar el objeto una vez se destruye.
Sin embargo, si la creas así;
Código Delphi
[-]Form1 := TForm1.Create(nil);
Al no tener propietario, no la libera nadie, con lo que ya tienes una fuga de memoria.
La forma correcta de hacerlo siempre es liberándola tú, de esta forma
Código Delphi
[-]Form1 := TForm1.Create(nil);
try
...
...
finally
Form1.Free;
end;
Un saludo