Hallo,
Problem mit managed records in 10.4.2.
Ich habe einen record und eine generische Liste dieser Records:
Delphi-Quellcode:
type
TMyRec =
record
Files : TStringlist;
MyStr :
string;
procedure Clear;
class operator Initialize(
out Dest: TMyRec );
class operator Finalize(
var Dest: TMyRec );
end;
/// <summary>
/// List of all updates found in the package
/// </summary>
TMyList =
class(TList<TMyRec>)
und ich habe diese record operators:
Delphi-Quellcode:
procedure TMyRec.Clear;
begin
Files.Clear;
MyStr := '';
end;
class operator TMyRec.Finalize(var Dest: TUpdate);
begin
Dest.ParameterFiles.Free;
// mein Loggingaufruf
log.Send(LevelBlue, cCategory, 'Liste freigegeben');
end;
class operator TMyRec .Initialize(out Dest: TUpdate);
begin
Dest.ParameterFiles := TStringlist.Create;
log.Send(LevelBlue, cCategory, 'Liste erzeugt');
end;
Woanders in einer Klasse im Code habe ich ein Listenfeld und eine Methode die
etwas verarbeitet:
Delphi-Quellcode:
type
TMyClass = class(TObject)
private
FMyList : TMyList;
procedure DoIt;
end;
[..]
procedure TMyClass.DoIt;
var
Rec: TMyRec;
begin
Rec.MyStr := 'Test';
FMyList.Add(Rect);
end;
Lt. diesem Blogpost einer authritativen Quelle:
https://blogs.embarcadero.com/custom...o-delphi-10-4/
bin ich der Meinung, dass FMyList.Add(Rect); den Initializer von TMyRec nicht aufrufen sollte, da
Add in Generics.Collections ein const vor dem Parameter stehen hat und das dann ja wie im Blogpost unter "Passing Managed Records as Parameters"
geschildert ein ParByConstValue sein müsste.
Nur mein Log und auch der Debugger die sagen etwas anderes.
Hat jemand eine Idee?
Grüße
TurboMagic