Ja, jkuiper verwart de Create(nil) met de Create(Self) uit het artikel.
In het artikel wordt overigens net gezegd dat er niets mis is met de constructie die Create(nil) gebruikt.
Ja, jkuiper verwart de Create(nil) met de Create(Self) uit het artikel.
In het artikel wordt overigens net gezegd dat er niets mis is met de constructie die Create(nil) gebruikt.
All methodologies are based on fear. -- Kent Beck.
Hier heb je er direct 1000;
Deze code laat zien dat je ook klasses (en niet eens speciale) kan aanmaken zonder er een variabele voor aan te maken:Code:program Project245; {$APPTYPE CONSOLE} uses classes,SysUtils; const tstringsD7instancesize = 48; // t.instancesize uit delphi. aantal =1000; var x : array[0..tstringsD7instancesize*aantal-1] of byte; // blok geheugen voor aantal tstringlist classen. t : array[0..aantal-1] of tstringlist; i,j: integer; begin fillchar(x,sizeof(x),#0); // vul het blok met nullen for i:=0 to aantal-1 do begin t[i]:=@x[i*tstringsd7instancesize]; // bereken een pointer naar de eerste klasse. ppointer(t[i])^:=tstringlist; // stel de VMT in ( deklasse.classtype) t[i].create; // initializeer de klasse. end; { de rest is om aan te geven dat de klassen werken} for i:=0 to aantal-1 do begin for j:=0 to 3 do begin t[i].add(inttostr(j)); end; writeln(t[i].count); end; readln; end.
- Je reserveert gewoon een block geheugen (de array "x"),
- vult het met nullen (de fillchar),
- laat de klassen er naar wijzen ( t[i], maar de array "t' heb ik meer voor het overzicht toegevoegd, in een echt scenario bereken je deze indien nodig, volgens de formule in de eerste regel van de eerste for)
- en dan roep je de constructor aan.
- de rest is om te bewijzen dat de classes wel gewoon werken.
Dit soort trucjes worden wel eens gebruikt in domein modellen, om fragmentatie en geheugen beheer overhead te voorkomen. De reden dat dit in deze thread staat is omdat ik de bedoeling ook niet helemaal begreep, en dacht dat de OP ergens een create zonder type kwalificatie had gezien. En ik had deze code nog liggen.
Last edited by marcov; 17-Apr-08 at 00:13. Reason: Aangevuld omdat dat moest van Benno.
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks