Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Gibt TObject Speicherplatz wieder frei ?

  Alt 20. Aug 2005, 02:59
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat