Einzelnen Beitrag anzeigen

Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#17

Re: Wann Destruktor-Aufruf nötig?

  Alt 28. Okt 2006, 11:41
Zitat von Cöster:
Hab ich Beitrag #3 richtig verstanden, dass ich vor dem erneuten Create nicht erst Destroy aufzurufen brauche?
Wenn Du ein Objekt erzeugt hast mußt Du grundsätzlich vor einem erneuten Create den Destructor aufrufen. Der Destructor wird über die Methode Free aufgerufen. Wenn Du das nicht machst produzierst Du Speicherlöcher!!!
Delphi-Quellcode:
Beispielprocedure TForm1.Button1Click(Sender: TObject);
var
  MyList : TStrings;
begin
1. MyList := TStringlist.Create; // Hier wird das Objekt MyList erzeugt und belegt Arbeitsspeicher
                                  // In MyList wird eine Referenz (Zeiger) auf den reservierten
                                  // Arbeitsspeicher abgelegt.
2. MyList.Add('Test');
3. MyList := TStringlist.Create; // Hier wird ebenfalls das Objekt MyList erzeugt und belegt Arbeitsspeicher
                                  // Was passiert aber mit dem unter 1. reservierten Arbeitsspeicher?
                                  // Gar nichts. Der Arbeitsspeicher wird durch das Create unter 3. weder
                                  // freigeben noch überschrieben. D.h. der Arbeitsspeicher bleibt reserviert und belegt
                                  // Da jetzt durch 3. MyList einen anderen Arbeitsspeicherblock referenziert ist der
                                  // Arbeitsspeicher von 1. für Dein Programm nicht mehr erreichbar und bleibt bis zum
                                  // Programmende belegt.
4. MyList.Add('Delphipraxis');
end;
Faustregel 1:
Code:
Was Du erzeugst musst Du auch wieder zerstören
Faustregel 2:
Code:
Vor jedem erneuten Create die Methode Free aufrufen
I come from outer space to save the human race
  Mit Zitat antworten Zitat