Moin und

im Forum!
Nano-Ware hat folgendes geschrieben : |
Wenn ich eine Varable/Komponente nur für eine Procedure, also z.B.
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TMainForm.FormCreate(Sender: TObject); var lista: TListItem; begin ... end; |
wird diese dann wieder aus dem Arbeitsspeicher entfernt, nachdem die Procedure beendet worden ist? |
Jain.
Lokale Variablen sind nur innerhalb der Prozedur/Funktion/Methode gültig, das ist schon richtig. Allerdings ist deine "Variable" ein Zeiger auf ein Objekt, das sich auf dem Heap befindet. Dieser Speicherplatz wird nicht automatisch freigegeben. Deshalb macht man üblicherweise einen Resourcenschutzblock um so eine Konstruktion:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TMainForm.FormCreate(Sender: TObject); var List: TListItem; begin List := TList.Create; try ... finally List.Free; end; end; |
Weiterhin ist bei einer TList zu beachten, dass deren "Inhalte" (sind ja nur Zeiger) beim Freigeben des Objekts nicht mit freigegeben werden (wenn du z.B. auf records zeigst).
cu
Narses
There are 10 types of people - those who understand binary and those who don´t.