Hallo erstmal!
Ich habe ein Problem mit FreeAndNil().
Meine Testklasse:
Delphi-Quellcode:
type
TTest = class(TObject)
public
constructor Create();
destructor Free;
destructor Destroy(); override;
end;
constructor TTest.Create;
begin
inherited;
end;
destructor TTest.Free;
begin
end;
destructor TTest.Destroy;
begin
inherited;
end;
und folgenden TestCode:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
MyTest1, MyTest2 : TTest;
begin
MyTest1 := TTest.create();
MyTest1.Free; // <-- ruft TTest.Free auf, wie erwartet
MyTest2 := TTest.create();
FreeAndNil(MyTest2); // <-- ruft TTest.Destroy auf, jedoch nicht TTest.Free
end;
Nun setzte ich in beiden Destruktoren einen Breakpoint, folgendes passiert:
- Destruktor TTest.Free wird von MyTest1.Free aufgerufen
- Destruktor TTest.Destroy wird von FreeAndNil(MyTest2) aufgerufen
Warum wird TTest.Free von FreeAndNil
nicht aufgerufen?
Ich benutze Delphi 7.
Danke für Hinweise und Gruss
Hugo