Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
28. Aug 2022
Ohhhh, die neuen Custom Managed Records verhalten sich übrigens ganz anders.
Sie werden "sofort" freigegeben, wenn sie nicht mehr benötigt werden ... nicht erst zum Ende des aktuellen Scopes. :shock:
type
TTest = record
Name: string;
constructor Create(S: string);
class operator Implicit(S: string): TTest;
class operator Initialize(out Dest: TTest);
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
28. Aug 2022
Mal schnell getestet und natürlich zuerst ein kleines Fehlerchen, mit blöder Auswirkung. (nur die lokalen Variablen wurden freigegeben)
type
TTest = class(TInterfacedObject, ITest)
Name: string;
constructor Create(Name: string);
destructor Destroy; override;
end;
type
ITest = interface
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
28. Aug 2022
Jo, also doch richtig gesehn.
Ist ja blöd, denn das alte Verhalten hatte in einem Fall einen Vorteil.
Für einfache Logging-Funktionen, also zu Beginn ein Interface erstellen und bei Funktionsende wird es freigegeben, also auch nochmal das Ende automatisch loggen können.
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
28. Aug 2022
Ich hab da mal bissl rumgespielt.
Einmal hätte ich ja das Problem, dass der Record sich unterschiedlich verhalten soll,
jenachdem von wo er kommt -> Property oder Variable.
Und wenn ich zwei Records habe, dass sie aber dennoch zuweisungskompatibel sind.
Kein Problem mit den ClassOperatoren, aber mit den Generics hatte ich sowas noch nie mit sich selbst probiert.
Versuch 1 (Idee siehe...
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
27. Aug 2022
Ja?
Mir fallen hierfür noch ein paar mehr "Sonderfälle" ein und irgendwann wird es dann normal :stupid:
Rein technisch sollten es im Compiler nicht so große Änderungen sein.
* hier ein +FieldOffset bei den Aufrufen
* und für Pointer und Classen zusätzlich noch eine Referenz auflösen
Und beim Parser/LSP muß nur der eine Punkt beachtet werden, wobei das ja schon gemacht wird, beim...
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
27. Aug 2022
Nja, als Self kann eigentlich nur Inner rein gehn.
Also dort, wo der Setter aufgerufen wird, wäre es kein Problem jeweils den Offset auf die Variable draufzurechnen.
Bei Records funktioniert ja leider das IS nicht, so dass man da nicht auf TOuter prüfen kann. :angle:
Aber ja, schön wäre es, wenn man hier auch Outer im Setter hätte, aber dieses Problem lässt sich notfalls anders lösen....
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
27. Aug 2022
Moin, wie nennt man eigentlich das hier?
type
TInner = record
Value: Variant;
end;
TOuter = record
Inner: TInner;
_____