Object1 := nil; Object2 := nil; try Object1 := TMyObject.Create; Object2 := TMyObject.Create; finally Object1.Free; Object2.Free; end;
If you do not initialize the objects with
nil outside the
try-finally block, if one of them fails to be created an AV will occur on the finally block, because the object won't be nil (as it wasn't initialized) and will cause an exception.
Free method checks if the object is nil, so initializing both objects with
nil avoids errors when freeing them if they weren't created.