Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Ein paar Fragen zu Delphi/Object Pascal


reimo - Mi 04.02.04 10:14
Titel: Ein paar Fragen zu Delphi/Object Pascal
Hi,

kann mir jemand sagen, ob dieser Code halbwegs richtig ist??

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
TTest = class
    test1: string;
    test2: string;
    test3: string;
    test4: string;
end;

XXX = class(TForm)
   List: TListBox
.....

   test: array[1..10of TTest;
end;

// muss ich fuer jedes Object im array den constructor aufrufen, oder übernimmt das automatisch der constructor der classe XXX

XXX.FormCreate
begin
for i := 1 to 10 test[i] := TTest.Create;
end;

.....
....

// wird in der folgenden function ein Pointer auf die classe test[i] gesetzt, oder wird eine kopie dieser erstellt ????

procedure XXX......
begin
   List.Items.AddObject( IntToStr(i), TObject(test[i]) );
end;

// muss ich den speicher von test[] selbst freigeben, oder übernimmt es Delphi für mich???
// muss ich beim Freigeben des Speichers auf etwas achten, da ja(falls) die Items/Objecte  von "List" darauf zeigen? 
procedure XXX.FormClose
begin
   for i := 1 to 10 do test[i].Free;
end;


danke im voraus
reimo

Moderiert von user profile iconUGrohne: Delphi-Tags eingefügt


AndyB - Mi 04.02.04 11:11
Titel: Re: Ein paar Fragen zu Delphi/Object Pascal
reimo hat folgendes geschrieben:
// muss ich fuer jedes Object im array den constructor aufrufen, oder übernimmt das automatisch der constructor der classe XXX

Dein Job.


Zitat:
// wird in der folgenden function ein Pointer auf die classe test[i] gesetzt, oder wird eine kopie dieser erstellt ????

Es wird nur die Referenz (=Zeiger) kopiert. Die Instanz (=Objekt) bleibt unberührt. Es zeigen jetzt nur 2 Referenzen auf ein und dasselbe Objekt.


Zitat:
// muss ich den speicher von test[] selbst freigeben, oder übernimmt es Delphi für mich???

Dein Job.

Zitat:
// muss ich beim Freigeben des Speichers auf etwas achten, da ja(falls) die Items/Objecte von "List" darauf zeigen?

LisiBox.Items speichert nur die Referenzen. Es gibt den Speichern nicht frei. Außnahme ist TObjectList, der du beim erzeugen angebenen kannst, ob die ObjectList die Objekte "besitzt".


reimo - Mi 04.02.04 11:23

passt!! danke für die antwort

mfg
reimo