Ich hangele mich gerade an einigen Beispielen entlang und finde dazu wiedersprüchliche Informationen: Wann verwende ich bei einem Create ein nil und wann ein self? Oder ist das egal?
Mit der Übergabe wird der Verantwortliche für den Speicher übergeben. Also wenn man "Self" übergibt, und das wird destroyt, dann destroyt es auch Deine Komponente mit. Wenn das mit NIL erzeugt wird, dann bleibt es im Speicher, bzw. Du musst es selbst mit Free frei geben.
Was du meinst ist der Owner der TComponent klasse. Ein Component kann weitere Components managen, indem man diesen den Subkomponenten als owner zuweist. Wird der Owner zerstört werden auch alle Komponenten die ihm zugewiesen wurden zerstört.
In einer Standard LCL Anweisung haben die meisten Komponenten die Application oder die Form als Owner. Da sobald die Application zerstört wird das Programm meist eh endet, macht der owner grundsätzlich da keinen unterschied (bei Programmende wird eh der gesamte Speicher aufgeräumt). Ist aber etwas unschön da diese Komponenten dann im Heaptrace auftauchen.
Sauberer ist es also entweder einen Sinnigen Owner zu setzen (z.B. ein Dynamische Button der in einem Panel liegt welches eventuell wieder gefreed wird würde es sinn machen das Panel als owner zu nehmen) oder per Hand aufzuräumen. Eine Form als Owner zu übergeben (z.B. über Self) ist, da die Forms zusammen mit der Application bei Programmende zerstört werden) ist also grundsätzlich funktional nutzlos, räumt aber den Heap auf, was das finden echter Memory leaks mit heaptrace einfacher macht (da man nicht zuerst sich durch alle false positives suchen muss)
Also wenn ich bei FormClose sowieso StopTimer aufrufe, in dem ein tHNDtimer.Free aufgerufen wird, isses egal. Aber mit self isses besser, weil es dann nichts macht, wenn ich das Free vergesse?