![]() |
AW: record fillchar Speicherleck
Zitat:
Oder vielleicht brauchst du irgendwann eine Methode die Länderkennzeichen, Postleitzahl und Ort in einem String liefert. Warum also mit einem Record beginnen wenn doch eine Klasse einen Mehrwert bietet? Und du kannst mir glauben - irgendwann kommst du an den Punkt an dem du merkst dass du mehrere Mandanten-Objekte brauchst. Dann wirst du ärgern dass du an tausend Stellen auf einen globalen Record zugreifst. |
AW: record fillchar Speicherleck
[rethorische Frage]Wozu überhaupt noch Records?[/rethorische Frage]
|
AW: record fillchar Speicherleck
Records kann man in einem Zug in und aus einem Stream kopieren. (allerdings dürfen dann keine Pointer-Typen enthalten sein)
Records haben eine automatische Speicherverwaltung Man zieht nicht einen ganz so großen Schwanz an Vererbungs unr RTTI-Zeugs mit. Und man kann sowas wie die Operatoren nutzen, welches ohne eine automatische Speicherverwalung nunmal nicht geht. (nja, bei Interfaces und bei Objekten mit ARC ginge es dennoch, wenn/falls es implementiert ist und wenn die endlich mal den seit Jahren von mir gewünschen Copy-Operator implementieren) |
AW: record fillchar Speicherleck
Generell ist das Verwenden von globalen Variablen zu vermeiden, vor allem, weil es eine einfache Möglichkeit gibt, diese zu schützen.
Delphi-Quellcode:
Sinnvoll ist es auch den Record immutable (unveränderlich) zu gestalten und die Erzeugung des Wertes über einen Konstruktor zu regeln:
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;
Delphi-Quellcode:
Im Konstruktor kann jetzt auf Plausibilität geprüft werden und bei unsinnigen Werten wirft man eine Exception.
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; Mit diesen einfachen Mitteln wird es unmöglich gemacht, dass unbemerkt Änderungen gemacht werden oder inkonsistente Daten vorliegen. |
AW: record fillchar Speicherleck
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:17 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-2025 by Thomas Breitkreuz