Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

AW: record fillchar Speicherleck

  Alt 19. Apr 2014, 11:04
Generell ist das Verwenden von globalen Variablen zu vermeiden, vor allem, weil es eine einfache Möglichkeit gibt, diese zu schützen.
Delphi-Quellcode:
interface

function GlobValue : MyRecord;
procedure SetGlobValue( const Value : MyRecord );

implementation

var
  _GlobValue;

function GlobValue : MyRecord;
begin
  Result := _GlobValue;
end;

procedure SetGlobValue( const Value : MyRecord );
begin
  // prüfen, ob die Änderung erlaubt ist
  _GlobValue := Value;
  // Benachrichtigung über die Änderung
end;
Sinnvoll ist es auch den Record immutable (unveränderlich) zu gestalten und die Erzeugung des Wertes über einen Konstruktor zu regeln:
Delphi-Quellcode:
MyRecord = record
private
  FS1 : string;
  FS2 : string;
public
  constructor Create( const S1, S2 : string );
  property S1 : string read FS1;
  property S2 : string read FS2;
end;

constructor MyRecord.Create( const S1, S2 : string );
begin
  // Validierung
  FS1 := S1;
  FS2 := S2;
end;
Im Konstruktor kann jetzt auf Plausibilität geprüft werden und bei unsinnigen Werten wirft man eine Exception.

Mit diesen einfachen Mitteln wird es unmöglich gemacht, dass unbemerkt Änderungen gemacht werden oder inkonsistente Daten vorliegen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat