Einzelnen Beitrag anzeigen

Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Dynamische Arrays in Records

  Alt 24. Jun 2008, 17:45
Genauer erklären?
Die RTTI eines Records kann so beschrieben werden:
Delphi-Quellcode:
//RTTI eines Records
type PPropContent=^TPropContent;
     TPropContent=record //je ein dynamisches Element des Records
       RecordData:ppointer; //RTTI einer dynamischen Variablen innerhalb des Records
       Position:cardinal; //Position der Variablen im Record
     end;

type PRecordData=^TRecordData; //Zeiger auf RTTI
     TRecordData=record
       size:cardinal; //Größe des Records insgesamt
       PropCount:cardinal; //Anzahl der dynamischen Komponenten
       Content:array[0..16737] of TPropContent; //max(content) liegt natürlich bei PropCount
end;

Im statischen Fall würde bei einem statischen Record dein dispose vom Compiler durch freemem ersetzt (die Größe kennt der Compiler ja)
In deinem speziellen Fall wird dispose aufgerufen und noch als zweiter Parameter ein Zeiger auf die RTTI deines Records übergeben (typeInfo(TmyRecord): PRecordData).
In dieser RTTI steht die Größe deines Records drinn (für Freemem) und noch die Anzahl dynamischer Elemente (bei dir ein Array)
Und dann kommt eine List (TPropContent) mit der Postion der Variable im Array und einen Zeiger auf die RTTI dieser Variablen. Und genau dort schaut er jetzt und sieht, dass es ein Array ist und ruft dann finalizeArray auf.
Über Zeitprobleme würde ich dabei nicht reden und die bequeme Variante über das Array wählen. (Ansonsten könntest du ja gleich in C programmieren )
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat