Page 2 of 2 FirstFirst 1 2
Results 16 to 17 of 17

Thread: class gebruiken zonder .create()

  1. #16
    SillyMember
    Join Date
    May 2003
    Location
    Gent
    Posts
    7,725
    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.

  2. #17
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Hier heb je er direct 1000;
    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.
    Deze code laat zien dat je ook klasses (en niet eens speciale) kan aanmaken zonder er een variabele voor aan te maken:

    - 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.

Page 2 of 2 FirstFirst 1 2

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •