Bei
Delphi-Quellcode:
procedure irgendwas;
var
pmyrecord : ^myrecordtype;
begin
new(pmyrecord);
...
end;
Ist es der Heap der die Daten aufnimmt.
Nööö bzw. das sind den hier die Daten?
"Die Daten" ist hier ein Pointer...
und genau das hat jaenicke hiermit gemeint...
Der Hauptunterschied bleibt aber:
Bei Klassen arbeitet man mit Pointern, bei Records muss man diese explizit benutzen und den Speicher auch ggf. Selbst reservieren und freigeben.
Natürlich nicht der "eine" Record, der mit einer Variablen definiert ist...
"Früher" wurden halt Records genutzt um Daten zu Speichern... Also war der Record EIN Datensatz. Da man nur 64KB Datensegment hatte, konnte man nicht beliebig viele Daten in einen Array of Record halten, sondern musste den Speicher vom HEAP anfordern. (New/Getmen)
Daher der Hinweis auf: Selber reservieren und freigeben...
Eine Klasse ist eigentlich "fast" nix anderes nur das man hier direkt den Pointer auf den Speicher hat... (Und noch ein bisschen mehr)
Also ob ich
Delphi-Quellcode:
type
TMyDaten = Record
Bla : Integer;
Foo : boolean;
end;
var
PMyDaten = ^MyDaten;
begin
New(PMyDaten);
try
PMyDaten^.Bla := 42;
finally
Dispose(PMyDaten);
end;
end;
oder
Delphi-Quellcode:
type
TMyDaten = Class
public
Bla : Integer;
Foo : boolean;
end;
Var
MyDaten : TMyDaten;
begin
MyDaten := TMyDaten.Create;
try
MyDaten.Bla := 42;
finally
MyDaten.Free;
end;
end;
Ist "fast" gleich...
Mavarik