I have a general question about best practice in OO Delphi. Currently, I put try-finally blocks anywhere I create an object to free that object after usage (to avoid memory leak
If you're creating the object in a class's constructor and the object will be owned by the enclosing class, you'll want to free it in the owning class's destructor.
I tend to use FreeAndNil() instead of calling Free.
EDIT: But as others have said, you definitely always want to free what you create.