TList does not alow direct freein of object as it serves only as colection of pointers to objects.

If you want to automaticly free up object upon their removal from list then I suggest to use TObjectList instead.
When TObjectList is created using
Code:
ObjectList := TObjectList.Create(True)
it means that TObjectList owns the objects added to it and automatically destroys them upon removal or on destroy of the whole TObjectList.