TSuper = class .... end;
TSub1 = class(THoge) .... end;
TSub2 = class(THoge) .... end;

という宣言をして、TSub1 や TSub2 のインスタンスを TList に Add したとします。
それらのインスタンスを解放したい時、どうすればいいでしょうか?

TList から取り出したポインタを TSuper にキャストして Free すると、
TSuper.Free が呼ばれて、メモリリークしてしまうのでしょうか?

もしダメなら、TSuper に Sub1 か Sub2 か識別する為のメンバを作りますです。