Folgende "einfache" Lösung ist auch möglich.
Delphi-Quellcode:
TMyList = class(TList)
public
DoSomething : boolean;
destructor Destroy; override;
end;
destructor TMyList.Destroy;
begin
if DoSomething then
begin
...do something...
end;
inherited;
end;
Dann kannst Du einfach mit folgenden Zeilen Deinen Zweck erfüllen.
Delphi-Quellcode:
...
var
ml : TMyList;
...
begin
...
ml := TMyList.Create;
...
ml.DoSomething := True;
...
ml.Free;
ml := Nil;
...
end;
...
Die "ml := Nil" Zeile habe ich mir angewöhnt, da ein Free prüft ob das Objekt <> nil ist und es in diesem Fall freigibt. Danach ist aber das Objekt zwar freigegeben, aber nicht nil. Der Pointer zeigt immer noch auf die Spericherstelle wo das Objekt mal war. Ein erneuter Aufruf von Free kann dann Probleme machen.