Autor Beitrag
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8553
Erhaltene Danke: 479

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 12.03.03 21:49 
Ich hab mal wieder ein Problem bei meinem Dienstplan-Programm.

Ich habe eine TObjectlist, die ich unter gewissen Umständen leeren möchte. Problem ist folgendes: Ich kann
tobjectlist1.clear kann ich nicht benutzen, weil jedes Object in der Liste unter anderem eine weitere TObjectlist enthält, und deren Objecte dürfen dabei NICHT verlorengehen.

Wenn ich jetzt mit ne Schleife
ausblenden Quelltext
1:
2:
for i:=0 to tobjectlist1.count-1 do
      objectlist1.extract(objectlist1.first)

die Liste leere, verliere ich sämtliche Referenzen auf die Objekte, d.h. ich kann sie hinterher nicht mehr explizit freigeben.
Wird das beim beenden des Programms automatisch erledigt (wäre eine unschöne Lösung), oder MUSS ich mir da was einfallen lassen? (z.B. eine Abfallliste einbauen und die am Ende clearen)

_________________
We are, we were and will not be.
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Mi 12.03.03 23:29 
Wieso leerst du die Liste, wenn du sie doch nicht leeren willst? Oder sind die Items der Unterliste noch in einer anderen Liste gespeichert?
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Liste1[]
  List2[]
    Item1
    Item2
  List3[]
    Item3

AlleListe[]
  Item1
  Item2
  Item3

Wenn dem so ist, dann kannst du beim erzeugen der Unterliste dem Konstruktor den Wert False übergeben. Damit sagst du der ObjectList, dass ihr die Elemente nicht gehören und sie diese auch nicht freigeben darf.

_________________
Ist Zeit wirklich Geld?
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8553
Erhaltene Danke: 479

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Do 13.03.03 11:16 
genau, die items der Unterliste sind noch in einer anderen Liste, und sollen da auch bleiben. Hab das Problem jetzt durch deine Anregung gelöst bekommen (hoffe ich):
Ich hatte mir ja extra einen Destructor für die Items in der Liste geschrieben, in dem ich die Unterliste mit zerstöre. (Das war zu einem früheren Entwicklungsstand des Programms nötig.)
Die Zeile hab ich dann mal einfach weggelassen, und lösch die Objekte der Unterliste durch den entsprechenden Destruktor für die Liste, in die die eigentlich reingehören. Aber erst am Programmende, nicht beim leeren der Liste.

_________________
We are, we were and will not be.