Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - TObject + TList + Speicherverwaltung


mcbain - Mo 20.02.12 10:50
Titel: TObject + TList + Speicherverwaltung
Hallo,
ich habe eine Frage zur Speicherverwaltung.
Wenn ich eine Liste voller Objekte erstelle, muss ich dann den Speicher jedes Objektes darin händisch wieder freigeben oder reicht es einfach die Liste wieder freizugeben?
Hier mal ein Beispiel:

.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
..
var liste: TList;
    myObject: TObject;
    i:integer;
begin
   liste := TList.Create;
   try 
     for i := 0 to 10 do
     begin
        myObject := TObject.Create;
        liste.Add(myObject);

     end;

   finally
     liste.Free;
   end
end;


Entsteht hierdurch eine Speicherlücke?
Ich komme aus der Java-Ecke und da stellt sich diese Frage ja nicht, also bitte nicht wundern.

Wäre nett, wenn mir jemand diese Frage beantworten könnte, bin mir nämlich gerade nicht mehr so sicher.
Vielen Dank.
Gruß
mc


Nersgatt - Mo 20.02.12 11:06

Jepp, das ist ein Speicherleck.
Du kannst aber eine TObjectList statt der TList verwenden. Die hat die Eigenschaft "OwnsObjects". Wenn du die auf True setzt, werden die Objekte beim Freigeben der Liste mit freigegeben.


mcbain - Mo 20.02.12 11:21

Gesagt, getan. Habe es auf die ObjectList umgestellt.
Vielen Dank für die schnelle Antwort.

Gruß
mc