Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat