Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Object Liste mit TList; braucht man unbedingt GetMem? [done]


cbs - Fr 19.09.03 16:12
Titel: Object Liste mit TList; braucht man unbedingt GetMem? [done]
huhu

also ich arbeite grade für meine verhältnisse an einem recht komplexen projekt :lol:

ich hab ein object deklariert, nenen wir es mal objectA. dieses object hat wie gehabt eigenschaften und methoden

ein weiteres object (objectB) hat andere eigenschaften und methoden, soll aber eine vielzahl von objecten des typs objectA haben.

zuerst hab ich das mit einem dynamischen array gelöst bis mir das nach einer weile zu "unelegant" erschien, vorallem dann wenn ein objectA in der liste verschoben oder ein neues mittendrin erzeugt werden sollte.

ich hab mir daraufhin das tut von motzi über pointer angeschaut und habs sogar verstanden :wink: (dank an motzi :lol: )

nun meine Frage: in diesem tut werden formulare erzeugt und deren pointer in einer TList gespeichert. soweit so gut. was mir noch nicht so recht klar ist wieso vorher speicher mit GetMem reserviert wird. ich hab natürlich hier im DF gesucht und hab einige Bsp gefunden wo objecte erzeugt werden ohne getmem zu benutzen.

also: reicht es aus mein object (ist kein formular und auch kein visuelles object) einfach zu erzeugen oder muss ich immer vorher entsprechend speicher reservieren?

wie das mit TList usw funktioniert hab ich verstanden. meine frage ist wirklich nur ob ich GetMem unbedingt brauche oder nicht da ich hier im forum diesbezüglich nix eindeutiges gefunden habe.

mfg cbs


Motzi - Fr 19.09.03 16:27

Hi,

freut mich das dir das Tut ein bisschen geholfen hat! 8) ;)

Aber anscheinend sind ein paar Sachen doch nicht so klar herausgearbeitet... :roll:

Nein, du benötigst kein GetMem und zwar aus einem einfachen Grund - wenn du dich noch ans Tutorial erinnern kannst, da steht drinnen, dass unter Delphi alle Objekte Pointer sind die implizit dereferenziert werden. Wenn das Objekt jetzt also bereits selbst ein Zeiger ist kann ich einfach diesen Zeiger für die Liste nehmen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var
  aObject: TObject;
  aList: TList;
  i: Integer;

aList := TList.Create;
try
  for i := 1 to 10 do
  begin
    aObject := TObject.Create;
    aList.Add(aObject);
  end;
finally
  aList.Free;
end;

Ich verwende GetMem in meinem Tutorial nur um dessen praktischen Einsatz auch noch einmal zu präsentieren (ich weiß - es ist nicht gerade gut gewählt), aber wenn ich mich recht erinnere hab ich am Schluß auch einen Hinweis darauf gegeben, dass man die Objekte (die ja auch nur Pointer sind) auch direkt benutzen kann...


cbs - Fr 19.09.03 16:56

ooook :lol:

danke dir :!: