Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Variable nur für eine Procedure erstellen
Nano-Ware - Mo 07.12.09 13:09
Titel: Variable nur für eine Procedure erstellen
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?
Moderiert von
Narses: Delphi-Tags hinzugefügt
Narses - Mo 07.12.09 13:29
Moin und :welcome: 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). :idea:
cu
Narses
Nano-Ware - Mo 07.12.09 13:50
Ok danke, das hat geholfen^^
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!