Es ist absolut sicher, um dies zu tun. Der Compiler wird identische Ausgabe produzieren.
Ich persönlich würde, wenn alle anderen Dinge gleich sind, empfehlen, dies zu tun. Die Verwendung des generischen Arrays TArray<T>
gibt Ihnen viel mehr Flexibilität und bessere Typkompatibilität.
Natürlich können diese Vorteile nur mit realistischerem Code gesehen werden, der etwas Arbeit leistet. Am häufigsten sehen Sie Vorteile bei der Verwendung von generischen Containern. Sie können jedoch auch Vorteile sehen, wenn Sie versuchen, Code mit mehreren verschiedenen Bibliotheken zu erstellen.
Die Verwendung generischer Arrays ermöglicht eine einfache Typenkompatibilität. Bevor generic-Arrays würden Sie ein Array-Typ wie folgt definieren:
TIntArray = array of Integer;
Wenn zwei Bibliotheken tun dies dann Sie inkompatible Typen haben. Wenn die Bibliotheken zustimmen, generische Arrays zu verwenden, wird Kompatibilität gegeben sein.
Um dies zu sehen deutlicher, dieses Fragment betrachten:
type
TIntArray1 = array of Integer;
TIntArray2 = array of Integer;
....
var
arr1: TIntArray1;
arr2: TIntArray2;
....
arr1 := arr2;
Diese Zuordnung ist nicht gültig und nicht mit einem Typ Mismatch-Compiler-Fehler. Dies ist in der Pascal-Sprache durchaus zu erwarten. Es ist schließlich stark typisiert und das sind unterschiedliche Typen. Auch wenn sie identisch implementiert sind.
Auf der anderen Seite:
var
arr1: TArray<Integer>;
arr2: TArray<Integer>;
....
arr1 := arr2;
gültig ist und nicht kompiliert. Die documentation for generic type compatibility sagt:
Zwei instanzierte Generika Zuordnung vereinbar angesehen werden, wenn die Basistypen identisch sind (oder sind Aliase in einen gemeinsamen Typ) und die Typargumente sind identisch.
Nur eine Anmerkung: Sie müssen 'try' /' finally' nicht verwenden, um den Speicher eines dynamischen Array-Typs freizugeben. Sie sind refcounted Typen, und der Speicher wird automatisch freigegeben, sobald 'Something' den Gültigkeitsbereich verlässt, es sei denn, sie werden immer noch von einer anderen Variablen referenziert. In jedem Fall verhält es sich genauso wie Ihre 'SetLength' zu einer Länge von Null. – hvd