AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

records oder klassen?

Ein Thema von JayZ · begonnen am 21. Mai 2016 · letzter Beitrag vom 9. Jun 2016
Antwort Antwort
Seite 3 von 3     123
Bambini
(Gast)

n/a Beiträge
 
#21

AW: records oder klassen?

  Alt 9. Jun 2016, 09:24
ich verstehe is immer noch nicht
wenn ich classen benutze ist ja klar das ich die erstellen (create) und löschen (free) muss wie sieht die speicherveerwaltung denn bei records aus? muss ich das auch freigen?
Ja, wenn man diese mit New() erzeugt.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.327 Beiträge
 
Delphi 10.4 Sydney
 
#22

AW: records oder klassen?

  Alt 9. Jun 2016, 09:28
Das hängt davon ab, wie du Records benutzt.
Allgemein kann man sagen:

Wird ein Record als Zeiger deklariert:
- mit New() erstellen und dem Zeiger zuweisen
- mit Dispose() freigegeben (Zeiger ist danach ungültig)
Delphi-Quellcode:
type
  PMyRecord = ^TMyRecord;
  TMyRecord = record
    ID: Integer;
    Name: string;
  end;

var
  P: PMyRecord;
begin
  New(P);
  try
    TuWasMit(P);
  finally
    Dispose(P);
  end;
end;
Wird ein Record direkt als Variable deklariert, kümmert sich der Compiler:
- um die Bereitstellung des Speichers beim Eintritt in den Gültigkeitsbereich
- um die Freigabe des Speichers beim Verlassen des Gültigkeitsbereichs
Delphi-Quellcode:
type
  PMyRecord = ^TMyRecord;
  TMyRecord = record
    ID: Integer;
    Name: string;
  end;

var
  R: TMyRecord;
begin
  TuWasMit(^R);
end;
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
710 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#23

AW: records oder klassen?

  Alt 9. Jun 2016, 09:50
ich verstehe is immer noch nicht
wenn ich classen benutze ist ja klar das ich die erstellen (create) und löschen (free) muss wie sieht die speicherveerwaltung denn bei records aus? muss ich das auch freigen?
Nein, eben nicht. Das macht es einfacher, weil man Records z.B. als Parameter oder Rückgabewert von Funktionen verwenden kann, ohne sich Gedanken machen zu müssen, wo man die wieder freigeben muss. Allerdings wird der Speicherverbrauch bei exzessiven Gebrauch dann höher sein, weil bei jedem Parameter der übergeben wird, eine Kopie des Records erstellt wird.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.327 Beiträge
 
Delphi 10.4 Sydney
 
#24

AW: records oder klassen?

  Alt 9. Jun 2016, 12:46
Ob bei der Parameterübergabe eine Kopie oder nur eine Referenz (praktisch ein Zeiger auf den übergebenen Record, aber vor dem Entwickler verborgen) übergeben wird, kann man aber mit den Schlüsselworten const, var oder out steuern.
Delphi-Quellcode:
procedure TuWasMitPointer(P: PMyRecord);
begin
  P^.ID := 1;
  P^.Name := 'Test';
end;

procedure TuWasMitReferenz(var R: TMyRecord);
begin
  R.ID := 1;
  R.Name := 'Test';
end;

procedure TuWasMitReferenz(out R: TMyRecord);
begin
  R.ID := 1;
  R.Name := 'Test';
end;
Die Prozeduren erzeugen genau den selben Code. Der Compiler führt beim Compilieren aber unterschiedliche Prüfungen aus und kann den Entwickler so bei falscher Benutzung warnen.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 05:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf