Also per se stimmt mit TSammelListe eigentlich alles. (im Create erstellen und im Destroy freigeben ... beides auf der selben Ebene ist immer gut)
Bist du sicher, dass das Speicherleck "dieses" Objekt ist und nicht irgendwas Anderes?
Was aber niemand verbieter, ins Create und Destroy der TSammelListe einen Haltepunkt oder Logmeldung einzufügen und zu schauen ob und wie oft das erstellt/freigegeben wird.
Was du eventuell noch bedenken mußt, TThread.Create wird immer im erstellenden Thread ausgeührt,
während bei FreeOnTerminate das Thread.Destroy immer im Thread abläuft.
Und bei einem externen .Free das Thread.Destroy ebenfalls in einem anderen Thread.
Aber manche Dinge müssen/dürfen (nur) im selben Thread genutzt werden, wo sie erstellt wurden.
-> Hier geht also nur TComponent.Create und Component.Free mit einem Try-Finally im Execute.
Und was ist TSammelListe?
"Normalerweise" machen Listen im Free automatisch ein Clear, somit würde ein Free ausreichen.
Delphi-Quellcode:
destructor TAnalyseThread.Destroy;
begin
FList.Free; // oder FreeAndNil(FList);
inherited;
end;
[EDIT] Jupp, die Liste gibt "ihre" Items frei, aber nicht die darin gespeicherten Objektreferenzen ... siehe Der schöne Günther