Sag mal Hansa, was ist den nmit dir los? Du programmierst doch schon eine ganze Weile und jetzt solche Fragen?
Also,
Destroy sollte man nie direkt aufrufen, sondern nur über die Methode
Free, da
Free vorher prüft, ob das Objekt nicht nil ist. Erzeugst du in deiner Klasse weitere Instanzen, überschreibst du
Destroy in deiner Klasse, gibst aber die Instanz der Klasse selber mit
Free frei.
Delphi-Quellcode:
type
TExample = class(TObject)
private
sl: TStringList;
public
Constructor Create;
Destructor Destroy; override;
end;
Constructor TExample.Create;
begin
inherited;
sl := TStringList.Create;
end;
Destructor TExample.Destroy;
begin
ShowMessage('Kuckuck');
sl.Free;
inherited Destroy;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
MyExample: TExample;
begin
MyExample := TExample.Create;
try
finally
MyExample.Free;
end;
end;
So.
Free wirft die Instanze aus dem Speicher, aber der Zeiger wird nicht auf nil gesetzt. So das nach dem
Free ein Test auf nil immer noch True ergibt. Entweder man setzt den Zeiger nun von Hand auf nil oder man läßt es die
VCL machen und nutzt die Prozedur
FreeAndNil.
Ich verstehe jetzt aber nicht so ganz dein Problem, denn das kann es ja nicht gewesen sein, denn das hast du ja hoffentlich schon drauf, ansonsten wüßte ich nicht, wie du bisher mit deinen Programmen Geld verdient hast.