Das Free bewirkt, dass die virtuelle Methode [TComponent].
Notification() aufgerufen wird.
Ausserdem werden alle Komponenten, die der Komponente Application gehören (also die Child-Components) benachrichtigt.
Und natürlich werden auch die Kinder der Kinder benachrichtigt.
Hier der entscheidende Ausschnitt aus dem Code:
Delphi-Quellcode:
procedure TComponent.Notification(AComponent: TComponent;
Operation: TOperation);
var
I: Integer;
begin
if (Operation = opRemove) and (AComponent <> nil) then
RemoveFreeNotification(AComponent);
if FComponents <> nil then
for I := 0 to FComponents.Count - 1 do
// Rekursiver Aufruf!!
TComponent(FComponents[I]).Notification(AComponent, Operation);
end;
Ich weiss jetzt nicht, welche Komponenten "Application" als Owner haben, aber es geht im Prinzip ein Broadcast an alle diese Komponenten.
Irgendeine Komponente könnte das "in den falschen Hals bekommen".
Wegen dieser Eskalation an Notification()-Aufrufen sollte man "Application" nicht als Owner angeben.