AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Echter Objektcontainer?

Ein Thema von DGL-luke · begonnen am 8. Aug 2005 · letzter Beitrag vom 8. Aug 2005
Antwort Antwort
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#1

Echter Objektcontainer?

  Alt 8. Aug 2005, 15:20
Ich habe mich gerade ein wenig mit listen bechäftigt, und festgestellt, dass TObjectList gar keine Objekte selbst hält, sondern nur die referenzen darauf und man damit z.B. die Objekte selbst in einem array noch halten muss.

Stimmt das so? Oder wie bringe ich "TDingsda" so in eine TObjectlist rein, dass ich es nicht selber halten muss, sondern die Objectlist das createn übernimmt? ich will mir eben so etwas ermöglichen:

Delphi-Quellcode:
with DingsList.add do //Dingslist.add liefert eine referenz auf ein TDings-Objekt, das die Liste selbst erstellt hat
 begin
  property1:='1';
  property2:='2';
 end;
Dass ich also nicht mehr selbst z.B. einen array mit meinen Objekten verwalten muss.

Geht das?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Echter Objektcontainer?

  Alt 8. Aug 2005, 15:33
Ich versteh dein Problem mit den Objectlisten nicht...


- du erzeugst irgendwo ein Objekt
- die Referenz zum Objekt speicherst du in einer Objektliste
- machst irgendwas mit den Objekten
- wenn du das Objekt nicht mehr brauchst gibst du es frei

oder

- du hast die Objektliste mit dem Parameter True erzeugt, dann gibst
du die Objektliste frei und alle Objekte werden auch freigegeben


Gruß


Edit: Wofür willst du die Objekte in einem Array speichern?
Versteh ich nicht. Solang du das Objekt nicht freigibst,
ist es da und bleibt auch da (bzw. Owner freigibst)...und zum freigeben
holst du die entsprechende Referenz aus der Objektliste, castest es zu deinem
Objekttypen und gibst es frei...

VORSICHT !!! Wie bei StringListen auch achte genau darauf welches Listenelement du
zuerst freigibst, da an freie Stellen nachgerückt wird
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Echter Objektcontainer?

  Alt 8. Aug 2005, 15:42
heisst das, dass so etwas zulässig ist? EDIT: und das objekt in der liste bleibt, bis ich es freigeben lasse?

MyObjectlist.add(TMyObject.create); Wenn ja, unter welchen Umständen?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#4

Re: Echter Objektcontainer?

  Alt 8. Aug 2005, 15:52
Miep := TMiep.Create(); Die Instanz von TMiep liegt jetzt irgendwo im Heap rum, Miep ist nur ein Zeiger darauf.
TObjectList hat TList als Vorfahren, das heißt es wird das reingeworfene Objekt als einen untypisierten Pointer in die PointerList von TList werfen.
Das ändert aber nix daran, dass es weiterhin ein Pointer auf die Instanz ist.
Ob du nun 5.000 neue Pointer darauf irgendwo anlegst interessiert das Objekt selbst herzlich wenig.

Tyrael hat zwar schon was dazu geschrieben, aber nunja...


Nachtrag: Wir sind hier immer noch in Delphi32, nicht in .Net.
Also wird hier kein unbenutztes Objekt per GC zerstört.
An Adresse 0815 (wobei Miep eigentlich nur die 0815 enthält, und dadurch auf die Instanz zeigt...) steht die TMiep Instanz, was immer du auch machst, solange du es nicht freigibst bleibt sie dort stehen.
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Echter Objektcontainer?

  Alt 8. Aug 2005, 17:18
Delphi-Quellcode:
  myObjectList := TObjectList.Create(False);
  ..
  .
  .
  AObject := TMyObject.Create();
  .
  .
  myObjectList.Add(AObject);




..
...
...
  TMyObject(myObjectList.Items(Index)).MachWas;
  TMyObject(myObjectList.Items(Index)).NeProperty := 45678;
  TMyObject(myObjectList.Items(Index)).NeAndereProperty := 'Hallo Welt';
....
...
....
...

 for i := myObjectList.Count - 1 DownTo 0 do
 begin
   TMyObject(myObjectList.Items[i]).Free;
   myObjectList.Items[i].Delete;
 end;
...
...
..
..

  myObjectList.Free;

alles Wichtige steht im oberen Beispielcode...weitere Infos in der Hilfe unter
TObjectList


Gruß

Tyrael
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz