AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Initialisierung eines Record-Feldes

Ein Thema von s.h.a.r.k · begonnen am 14. Mai 2011 · letzter Beitrag vom 15. Mai 2011
Antwort Antwort
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Initialisierung eines Record-Feldes

  Alt 14. Mai 2011, 20:32
Delphi-Version: XE
Hallo,

habe im Moment das Problem, dass ich ein Feld in einem Record habe, welches eigentlich initialisiert werden sollte.
Delphi-Quellcode:
TBlub = record
private
  FArray : PGenericArray; // Entweder das hier
  FBoolean : Boolean; // ... oder das hier
Hatte gerade einen constructor eingebaut, der aber nicht funktioniert hat, er wurde nicht mal angesprungen

Nun die Frage: wie kann ich eines der Felder denn initialisieren? Oder wird das Boolean-Feld schon automatisch initiailisiert? Habe auf die schnelle nicht gefunden.

-- EDIT: Vielleicht sollte ich noch dazu erwähnen, dass ich ein paar Operatoren überladen habe Ich weiß nicht, ob das hier evtl. eine Rolle spielt.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.314 Beiträge
 
Delphi 12 Athens
 
#2

AW: Initialisierung eines Record-Feldes

  Alt 14. Mai 2011, 21:12
Vote for Me => http://qc.embarcadero.com/wc/qcmain.aspx?d=82524

Nee, der Constructor ist leider aktuell kein "richtiger" Constructor.
Wie du bestimmt schon bemerkt hast, kann man keinen parameterlosesn Constructor erstellen ... rate mal, warum.


Antwort:
Beide Felder enthalten keine Typen mit automatischer Speicherverwaltung (wie z.B. bei String, dyn. Array oder Interface),
also werden keine deiner Felder automatisch initialisiert, sie werden auch nicht ordentlich umkopiert (z.B. bei a := b; ) und vorallem wird nichts davon automatisch freigegeben.

Willst du eine automatische Speicherwerwaltung, wirst du mindesens einen automatischen Typen verbauen und diesen als Initialisierungsmarker mißbrauche oder gleich alle Daten z.B. in einem String, dyn. Array oder Interface ablegen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (14. Mai 2011 um 21:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

AW: Initialisierung eines Record-Feldes

  Alt 14. Mai 2011, 21:17
Und Felder werden scheinbar auch nicht initialisiert Echt super das ganze...

Wenn ich aber einen String anlegen würde, dann wäre er anfangs leer?

YEAHA Es geht! Danke dir, mein WE ist gerettet!!! Jetzt steht meinem Array-Record eigentlich nichts mehr im Wege. Die Tests sind auch alles okay... Geil
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)

Geändert von s.h.a.r.k (14. Mai 2011 um 21:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.314 Beiträge
 
Delphi 12 Athens
 
#4

AW: Initialisierung eines Record-Feldes

  Alt 14. Mai 2011, 21:25
Ja.

Aus diesem Grund hab ich hier mehrere Werte/Felder in soeinem automatischem Typ versteckt und die Initialisierung des Encoding wird ebenfalls über diesen automatischen Typen abgeglichen/überprüft.
http://www.delphipraxis.net/144528-s...iccharset.html

PS: Nur die String besitzen eine "ordentliche" Referenzzählung, mit automatischer Überprüfung einer Single-Instance.

Nomale dyn. Arrays verfügen nicht über sowas, was bei der Kapselung in einem Record zu problem führen kann.

Delphi-Quellcode:
var a, b: array of integer;
SetLength(a, 1);
a[0] := 1;
b := a;
b[0] := 2;
if a[0] = 1 then ShowMessage('heul');
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (14. Mai 2011 um 21:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

AW: Initialisierung eines Record-Feldes

  Alt 14. Mai 2011, 22:22
Daher musste ich die letzten Tage meine Copy-Methode noch anpassen. Ein einfach Move() hat es in Fällen von z.B. den Strings eben nicht mehr getan.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

AW: Initialisierung eines Record-Feldes

  Alt 15. Mai 2011, 14:32
wie wäre es denn mit:
Delphi-Quellcode:
TBlub = record
private
  FArray : PGenericArray; // Entweder das hier
  FBoolean : Boolean; // ... oder das hier
public
  procedure Init;
end;

procedure TBlub.Init;
begin
  //alle Defaultwerte setzen
end;

var Blub: TBlub;

//an passender Stelle einfach
Blub.Init;
Bei D2007 geht das so.
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
Antwort Antwort


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 +1. Es ist jetzt 08:55 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