In der Variable kann nur eine Referenz gespeichert werden, also kann FreeAndNil(x), x.Free oder sonstwas natürlich auch immer nur das Letzte freigeben.
Alternative sind Interfaces, wo es eine automatische Speicherverwaltung gibt.
>> Du schreibst hier nacheinander zwei Referenzen in die Variable List.
Außerdem setzt FreeAndNil nur die übergebene Variable auf NIL
und sonst kennt sie nichts.
Delphi-Quellcode:
procedure FreeAndNil(var Obj: TObject);
begin
Obj.Free;
Obj := nil;
end;
// aber eigentlich so, wie es auch der Name sagt
procedure FreeAndNil(var Obj: TObject);
var
Temp: TObject;
begin
Temp := Obj;
Obj := nil;
Temp.Free;
end;
Lösung hier sind Weak-Referenzen, aber diese gibt es nicht in älteren Delphi-Version und ist auch platformabhängig.