Einzelnen Beitrag anzeigen

Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#7

AW: Funktions-Parameter record: Call-by-value??

  Alt 15. Jun 2015, 15:26
Da kann man im Prinzip lange darüber streiten, ob Zeiger Referenzen oder Values sind. Letztendlich funktioniert die Übergabe von Parametern auf Instruktionsebene immer nur by-value; der Prozessor arbeitet erst einmal nur mit Werten. Alles darüber sind "nur" semantische Unterschiede, wenn auch nützliche. An der Stelle sollten wir uns aber nicht festbeißen.

Geschieht das per Call-On-Value (also wird der Record kopiert) oder per Call-On-Reference (nur die Referenz auf den Record wird übergeben).
Das Problem ist, dass ich im private-Bereich der Klasse ein Feld "FData: TMyDataRecord" deklariert hab, das die Daten sammelt und sobald alles vollständig ist das Event aufruft: "OnEvent(self, FData)". Call-On-Value wäre also angebracht.
BTW: Kann ich Call-On-Value nicht mit "const" vor dem Parameter erzwingen?
Deine Überlegung ist vermutlich: Der Event-Handler soll nicht an dem Feld herummanipulieren dürfen, also möchte ich call-by-value.
Nun das Problem dabei: Wenn dein Record groß ist, dann wird das Kopieren des Records aufwendig. Was du tatsächlich möchtest, das ist eine schreibgeschützte Referenz auf das Record; und die bekommst du mit const . Sollte eine Kopie nötig sein, wird der Event-Handler das schon machen.
  Mit Zitat antworten Zitat