![]() |
AW: records oder klassen?
Und was hat der Unterschied zwischen Stack und Heap jetzt mit Records und Klassen zu tun?
(naja einen Berührungspunkt wird man bestimmt finden) Gruß K-H |
AW: records oder klassen?
Zitat:
|
AW: records oder klassen?
Zitat:
Ein Record ist ein ![]() ![]() |
AW: records oder klassen?
Zitat:
![]() Records are value types, so they are copied on assignment, passed by value, and allocated on the stack unless they are declared globally or explicitly allocated using the New and Dispose function. Classes are reference types, so they are not copied on assignment, they are passed by reference, and they are allocated on the heap. Records are constructed automatically, using a default no-argument constructor, but classes must be explicitly constructed. Because records have a default no-argument constructor, any user-defined record constructor must have one or more parameters. |
AW: records oder klassen?
wenn ich so etwas habe:
Delphi-Quellcode:
dann ist es klar, das d.. auf dem Stack landet;
procedure irgendwas;
var myrecord : myrecordtype; begin ... end; Bei
Delphi-Quellcode:
Ist es der Heap der die Daten aufnimmt.
procedure irgendwas;
var pmyrecord : ^myrecordtype; begin new(pmyrecord); ... end; Gruß K-H |
AW: records oder klassen?
![]() ![]() Zitat:
Deshalb wäre das nur für kleine Größen sinnvoll um einen Stacküberlauf zu vermeiden. Stacküberlauf: Stammt das icht aus DOS-Zeiten, sowas habe ich schon eeewig nicht mehr gehabt (Klopf auf Holz). Aber Segmentgrenzen-Fehler 16MB habe ich schon mehrfach gehabt, auf iOS ... Es könnte ja sein das diese alten, vergessenen Probleme auf den mobilen Plattformen ein zweites Zombie-Dasein führen. Rollo |
AW: records oder klassen?
Ergänzung:
Klassen können abgeleitet werden. Klassen können Interfaces implementieren |
AW: records oder klassen?
Zitat:
"Die Daten" ist hier ein Pointer... und genau das hat jaenicke hiermit gemeint... Zitat:
"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:
oder
type
TMyDaten = Record Bla : Integer; Foo : boolean; end; var PMyDaten = ^MyDaten; begin New(PMyDaten); try PMyDaten^.Bla := 42; finally Dispose(PMyDaten); end; end;
Delphi-Quellcode:
Ist "fast" gleich...
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; Mavarik |
AW: records oder klassen?
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? |
AW: records oder klassen?
Was aber auch geht ist
Code:
Bla = 42 und Foo wäre False
type
TMyDaten = Record Bla : Integer; Foo : boolean; end; var LMyDaten :TMyDaten; begin LMyDaten = Default(TMyDaten); // Record wird Initialisiert (alle Felder auf 0) LMyDaten.Bla := 42; end; Der Record wird wie eine lokale Variable behandelt (inclusive Speicher reservieren in Recordgröße und ohne Initialisierung) die auf den Stack abgelegt wird. Records sind nix anderes als strukturierte Variablen. Das gute an Records ist, das man sich nicht um das Freigeben des Speichers kümmern muss (Es sei denn man verwendet New()) Auch das kopieren von Records geht einfach durch Zuweisung (Achtung: Bei Pointer ,Klassen, variablen Arrays und Methodenreferenzfeldern wird nur die Adresse kopiert nicht der Inhalt) Sie eignen sich gut als Übergabe und Resultparameter für Functionen und Proceduren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz