Einzelnen Beitrag anzeigen

peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
670 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Array zuweisungen

  Alt 14. Jan 2019, 12:46
TBytes ist ein reference type (d. h. eine Variable dieses Typs enthält einen Pointer auf den Speicher, der die eigentlichen Daten enthält). Das erste Konstrukt verändert direkt den Inhalt des übergebenen TBytes arrays, ohne irgendwelchen neuen Speicher zu allokieren. Das sieht auf den ersten Blick seltsam aus, da der Parameter ja als Const deklariert ist. Wieso kann man ihn also modifizieren? Das geht aber bei allen reference types, da der Compiler nur den übergebenen Pointer als Const behandelt und nicht den Speicher, auf den der Pointer verweist. Trotzdem ist das Konstrukt etwas "anrüchig", weil die Deklaration ja auf den ersten Blick so aussieht, als wenn die Methode den übergebenen Parameter nicht ändern wird. Sollte man vermeiden, die Methode hat so einen nicht direkt ersichtlichen side effect.

Das zweite Konstrukt macht es richtig, es allokiert einen neuen, separaten array und liest nur aus dem übergebenen array; Decode speichert das Resultat seiner Arbeit in diesem neuen Array. Das Verhalten der Methode stimmt also mit den Erwartungen des Programmieres überein, der nur die Deklaration der Methode kennt und sich nicht deren Implementierung angesehen hat. Dafür zahlt man einen geringen Aufpreis in erhöhtem Aufwand für die Speicherverwaltung, aber das ist gut angelegtes Kapital.
Peter Below
  Mit Zitat antworten Zitat