Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: Typisierten bzw. Untypisierten Variablen

  Alt 4. Okt 2009, 02:41
New als Funktion?
Ich kenn das nur als Prozedur

Delphi-Quellcode:
procedure TDhDrive.ListRec_Add(Directory:string;SR:TSearchRec);
var;
  P : PDateiListRec;
begin
  //with SR do // ich wüßte jetzt nicht, wofür das nötig sein sollte? *grübel*
  //begin
    New(P);
    FillChar(P^, SizeOf(P^), 0);
    PDateiListRec(P)^.SRec := SR;
    FDateiRecList.Add(P);
  //end;
end;
Also nun zum Problem:
Dispose ruft die Prozedur Finalize auf und übergibt diesem den Record, bevor es selber den Speicher des Records mit FreeMem freigibt.

Finalize "löscht" alle initialisierungspflichtigen Typen von Delphi, also
> Strings (Ansi, Wide & Unicode), dynamische Arrays und Interfaces

Genauso wie New die Prozedur Initialize aufruft und diese Typen entsprechend initialisiert (quasi mit 0 füllt), nachdem es mit GetMem den Speicher des Records besorgt hat.
Wenn es dir also nicht wichtig ist, daß z.B. auch Integer und Objectvariablen unbedingt mit 0 initialisiert werden, da sie danach eh mit irgendwas gefüllt werden, dann könntest du dein FillChar auch weglassen.
$2B or not $2B
  Mit Zitat antworten Zitat