![]() |
TObjectlist, wie funktioniet sie wirklich?
Hi,
Ich habe schon öfters die TObjectlist benutzt um eine Vielzahl Objekte vom selben Typ zu verwalten, da sie einfach angenehmer als ein Array ist, alleine durch Insert und delete. Aber, was macht sie wirklich, und wie bediene ich sie richtig? Ich weiss, das Objekte nur Zeiger auf einen Speicherbereich sind, und man sie deshalb auch nicht ohne weiteres kopieren kann ala objekt1:=objekt2 da dann objekt1 nur auf Objekt2 zeigen würde und eine Änderung in einem der beiden würde daher beides betreffen. So nun möchte ich gerne eine ganze Menge Objekte in der TObjectlist speichern. Folgendes funktioniert aber beispielsweise nicht.
Delphi-Quellcode:
In beiden Elementen der Liste würde nun Test2 stehen.
//Pseudocode
var Objekt: TObjekt; liste:TObjectlist; begin TObjekt:=TObjekt.create('Test1'); liste.add(TObjekt); TObjekt:=TObjekt.create('Test2'); liste.add(TObject); end; Ist es daher richtig zu sagen, in einer TObjectlist werden nur Zeiger gespeichert? Wenn ja wie befülle ich dann am elegantesten eine TObjectlist mit vielen Elementen in einer einzelnen Prozedur. Wenn ich jedesmal nur ein Objekt reinspeichere funktioniert es, da die lokale temporäre Variable scheinbar bei jedem Aufruf eine andere Speicheradresse hat auf die ich dann über die TObjectlist zugreifen kann. Aber ich schreibe eigentlich zuviel. Kann mir jemand erklären wie das ganze mit der TObjectlist funktioniert, also wie ich Objekte am besten lade und speichere, oder mir einen link geben wo die funktionsweise und das was dahinter steckt beschrieben wird? Vielen Dank schonmal :) |
Re: TObjectlist, wie funktioniet sie wirklich?
Zitat:
Delphi-Quellcode:
Daher sind es 2 unterschiedliche Zeiger die die Objektliste da bekommt und speichert. In beiden Einträgen stehen unterschiedliche Adresse. Der Code funktioniert so...
//Pseudocode
var Objekt: TObjekt; liste:TObjectlist; begin liste := TObjectList.Create; Try Objekt := TObjekt.create('Test1'); liste.add(TObjekt); Objekt := TObjekt.create('Test2'); // Objekt bekommt hier eine neue Instanz zugewiesen, somit eine neue "Adresse auf die Objekt" zeigt. liste.add(TObject); finally list.free; end; end; Zitat:
Zitat:
Zitat:
Kann es sein, dass deine TObjectList genauso lokal deklariert ist wie in deinem Beispiel? |
Re: TObjectlist, wie funktioniet sie wirklich?
Zitat:
|
Re: TObjectlist, wie funktioniet sie wirklich?
Warum nicht gleich:
Delphi-Quellcode:
?
var
liste:TObjectlist; begin liste.add(TObjekt.create('Test1')); liste.add(TObjekt.create('Test2')); end; |
Re: TObjectlist, wie funktioniet sie wirklich?
Zitat:
Zitat:
Zitat:
Zitat:
gut vielen dank für eure Hilfe, ich glaub jetzt bin ich etwas sicherer im Umgang mit der Objectlist :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz