Thema: Delphi Warum ARC abgeschafft?

Einzelnen Beitrag anzeigen

Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Warum ARC abgeschafft?

  Alt 31. Mai 2020, 10:59
Nun auch mal meinen Senf zum Thema ARC.

Ich konnte mich noch nie mit ARC anfreunden. Wenn ich etwas erzeuge, dann möchte ich auch selber entscheiden, wann es freigegeben wird. Bin vielleicht darin etwas altmodisch.

Lästig ist allerdings der ganze try-finally-Block innerhalb einer Procedure.

Aber dafür hat man mit Managed Records ja nun eine Art ARC-Lite. Einfach eine TStringlist in ein Managed Record (TMyStringlistRec) reinschmeissen. Der Record übernimmt das Erzeugen und Freigeben der Stringlist. Nun muss nur noch in einer Procedure statt einer TStringlist der Record (TMyStringlistRec) deklariert werden und ich kann auf die Stringlist zugreifen. Um das Create und Free muss ich mich nicht mehr kümmern. Try-Finally fällt weg.

(Soviel zur Theorie. In der Praxis habe ich das noch nicht getestet.)
Wir hatten das ja beim letzten Delphi-Frühstück im Ansatz mal getestet. Ich habe das mit den Managed records inzwischen umgesetzt und kann Dir sagen, das funktioniert hervorragend. Habe mir bezogen auf Stringlists direkt 3 unterschiedliche Record-Typen angelegt :

TMyStringList // ganz normal
TMySortedStringList // StringList mit Sortierung
TMyStrictSortedStringList // sortiert und mit dupignore (also keine doppelten Einträge)


Wenn ich also in einer Prozedur eine einfache Stringlist brauche, geht das einfach so:

Delphi-Quellcode:
Procedure TuWasMitDatei (AFile: String);
begin
 
  if FileExists (AFile) then begin // Wenn Datei nicht existiert wird Liste nicht gebraucht, Inline Var macht hier sinn

    var sl: TMyStringList;
    sl.List.LoadFromFile (AFile);

    /// weitere aktionen

  end;
 
end;
Durch die Intialisierungsblöcke im Record wird die StringList automatisch erzeugt (und falls erforderlich wie gewünscht vorbelegt)
Nach Austritt aus der Procedur wird die Finalization im Record aufgerufen und die Liste freigegeben

--> Kein Try Finally mehr für solche Sachen in der eigenen Prozedur notwendig (in der Implementation
des Records auch nicht, das macht der Compiler automatisch)
--> Bei einer streng sortierten Liste erspare ich mir noch das Setzen von "sorted" und "dupIgnore"
--> Ein weiteres Feature, das ich liebe.

Geändert von Harry Stahl (31. Mai 2020 um 11:09 Uhr)
  Mit Zitat antworten Zitat