Einzelnen Beitrag anzeigen

Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#18

AW: records oder klassen?

  Alt 27. Mai 2016, 03:28
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
  Mit Zitat antworten Zitat