Agregando a lo que dijeron anteriormente, hay un tema un poco oscuro en esta forma de tratar el manejo de errores al crear objetos:
Código Delphi
[-]
...
Obj1 := TClase.Create;
Obj2 := TClase.Create;
Obj3 := TClase.Create;
Try
finally
Obj1.Free;
Obj2.Free;
Obj3.Free;
end;
Es algo muy fuera de lo común, pero imaginemos que estos constructores producen errores: si el constructor del primer objeto falla, este no se ha creado, suponemos que la clase gestiona bien la memoria y no es necesario liberarlo pues no se ha creado, pero si falla el segundo o el tercero, los objetos anteriores han sido creados y nunca se ejecutará el código donde liberamos la memoria de los mismos. Por eso tengo la costumbre, de que cada constructor tiene asociado un bloque de control de errores para poder liberar el espacio utilizado, ejemplo:
Código Delphi
[-]
...
Obj1 := TClase.Create;
Try
Obj2 := TClase.Create;
Try
Obj3 := TClase.Create;
Try
finally
Obj3.Free;
end;
finally
Obj2.Free;
end;
finally
Obj1.Free;
end;
Saludos!