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