AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

into Record?

Ein Thema von himitsu · begonnen am 27. Aug 2022 · letzter Beitrag vom 5. Sep 2022
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.362 Beiträge
 
Delphi 12 Athens
 
#13

AW: into Record?

  Alt 28. Aug 2022, 22:54
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.


Delphi-Quellcode:
type
  TTest = record
    Name: string;
    constructor Create(S: string);
    class operator Implicit(S: string): TTest;
    class operator Initialize(out Dest: TTest);
    class operator Finalize(var Dest: TTest);
    class operator Assign(var Dest: TTest; const [ref] Src: TTest);
  end;

constructor TTest.Create(S: string);
begin
  Name := S;
  ShowMessage('Create ' + Name);
end;

class operator TTest.Implicit(S: string): TTest;
begin
  Result.Name := S;
  ShowMessage('Impicit ' + Result.Name);
end;

class operator TTest.Finalize(var Dest: TTest);
begin
  ShowMessage('Final ' + Dest.Name);
  Dest.Name := '';
end;

class operator TTest.Initialize(out Dest: TTest);
begin
  Dest.Name := 'Init';
  ShowMessage('Init');
end;

class operator TTest.Assign(var Dest: TTest; const [Ref] Src: TTest);
begin
  if Dest.Name = 'Initthen
    ShowMessage('Assign ' + Src.Name)
  else
    ShowMessage('Assign ' + Src.Name + '>' + Dest.Name);
  Dest.Name := Src.Name;
end;

procedure TForm11.FormCreate(Sender: TObject);
var
  Var1a, Var1, Var2a, Var2, Var3a, Var3, Var4a, Var4: TTest;
begin // Init Var1a..Var4
  Var1a := 'Var1a'; // Init/Implicit (Temp)Var1a / Assign Var1a / Final (Temp)Var1a
  Var1 := TTest.Create('Var1'); // Init/Create (New)Var1 / Assign Var1 / Final (New)Var1
  var Inline1 := TTest.Create('Inline1'); // Init/Create Inline1
  TTest.Create('Temp1'); // Init/Create/Final Temp1
  Beep;
  if Tag = 0 then
    Var2a := 'Var2a'; // Init/Implicit (Temp)Var2a / Assign Var2a / Final (Temp)Var2a
  if Tag = 0 then
    Var2 := TTest.Create('Var2'); // Init/Create (New)Var2 / Assign Var2 / Final (New)Var2
  if Tag = 0 then
    var Inline2 := TTest.Create('Inline2'); // Init/Create/Final Inline2
  if Tag = 0 then
    TTest.Create('Temp2'); // Init/Create/Final Temp2
  Beep;
  if Tag = 0 then begin
    Var3a := 'Var3a'; // Init/Implicit (Temp)Var3a / Assign Var3a / Final (Temp)Var3a
    Var3 := TTest.Create('Var3'); // Init/Create (New)Var3 / Assign Var3 / Final (New)Var3
    var Inline3 := TTest.Create('Inline3'); // Init/Create Inline3
    TTest.Create('Temp3'); // Init/Create/Final Temp3
  end; // ###NOT FInal Temp3 / Final Inline3
  Beep;
  if Tag = 0 then begin
    Var4a := 'Var4a'; // Init/Implicit (Temp)Var4a / Assign Var4a / Final (Temp)Var4a
    Var4 := TTest.Create('Var4'); // Init/Create (New)Var4 / Assign Var4 / Final (New)Var4
    var Inline4 := TTest.Create('Inline4'); // Init/Create Inline4
    TTest.Create('Temp4'); // Init/Create/Final Temp4
    Beep;
    begin
      TTest.Create('Temp6'); // Init/Create/Final Temp6
      Beep;
      TTest.Create('Temp7'); // Init/Create/Final Temp7
      Beep;
    end; // ###NOT Final Temp7/Temp6
    Beep;
    begin
      var Temp8 := TTest.Create('Temp8'); // Init/Create Temp8
      Beep;
      Temp8 := TTest.Create('Temp9'); // Init/Create (New)Temp9 / Assign Temp9>Temp8 / Final (New)Temp9
      Beep;
    end; // NOT Final (Temp8)Temp9
    Beep;
    ShowMessage('Show'); // Show
    Beep;
  end; // ###NOT Final Temp4 / Final Inline4
  Beep;
end; // ###NOT Final Temp1 / Final Inline1/Var4..Var1a
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:13 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