Wie gesagt, es gib leider keine automatische Initialisierung, aber man kann sich sowas basteln.
Alle Felder auf Property umleiten und mit einer Prüfmethode versehen, ebenso alle Methoden.
Delphi-Quellcode:
type
TMyRecord = record
pivate
FInitCheck: array of Byte;
FInt: Integer;
FBool: Boolean;
...
procedure InitCheck;
public
property Int: Integer read GetInt write SetInt;
property FBool: Boolean read GetBool write SetBool;
procedure Machwas;
end;
procedure TMyRecord.InitCheck;
begin
if FInitCheck = nil then
begin
// Felder initialisieren
...
SetLength(FInitCheck, 1);
end;
end;
Und dann jeweils am Anfang aller Methoden InitCheck aufrufen.
FInitCheck wird von Windows immer als NIL initialisiert und wenn es mal kein NIL ist, dann wurde InitCheck aufgerufen.
Das umkopieren und freigeben des Records kann man so aber nicht mitbekommen.
Dafür könnte zumindestens das Freigeben, man über ein Interface bewerkstelligen, welches man statt dem Array nimmt und welchem die freizugebenden Daten (schon beim Erstellnen und bei allen wichtigen Änderungen) bekanntgemacht wurden, da das Interface keinen Zugriff auf den Record hat.
Oder man macht eben gleich alle Daten in das Interface rein und baut in den Record nurn noch Weiterleitungen ein.
Ein Therapeut entspricht 1024 Gigapeut.