Nimm' als InnerList eine TobjectList mit OwnsObject = true.
Und zum löschen, rufst du einfach ihr Clear auf. (Du nennst es dann natürlich auch Clear
).
Falls du einen event auslösen willst, der dich darüber informiert, dass ein Item entfernt wurde, müsste du natürlich wieder rückwärts durchlaufen und alles selbst rauswerfen.
Der Cast zu TObject ist natürlich witzlos, wenn es eine TObjectList ist.
btw: Dupliziere nix was bereits TObjectList implementiert hat, reiche es nur durch.
Code, den du nicht geschrieben hast, musst du auch nicht testen. (wenn er so oft benutzt wird wie TObjectList.Xyz, ist ja fast wie TObject.Free()
)