Einzelnen Beitrag anzeigen

Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.617 Beiträge
 
Delphi 12 Athens
 
#20

AW: Unterschied zwischen (var AFileStream: TFileStream) und (AFileStream: TFileStream

  Alt 14. Mai 2014, 13:33
Holen wir mal ein bisschen aus:
Delphi-Quellcode:
procedure TfrmSchiessMichTot.MachWas;
var
  //Instanzvariable
  Dingens: TDingens;
begin
  //Erzeugen der Instanz und Ablegen in der Variablen (intern ein Zeiger)
  Dingens := TDingens.Create;
Dingens ist also ein Zeiger auf die Instanz, die mit dem Create-Aufruf angelegt wurde.
Delphi-Quellcode:
procedure MachDingens(ADingens: TDingens);
//ADingens ist hier eine Kopie der ursprünglichen Instanzvariablen,
//zeigt aber somit auch auf dieselbe Instanz, daher lässt sich darüber auf
//deren Methoden und Eigenschaften zugreifen
Folgender Code schadet also nicht, da er nur die Kopie betrifft:
Delphi-Quellcode:
procedure MachDingens(ADingens: TDingens);
begin
  ADingens := TDingens.Create;
Delphi-Quellcode:
procedure MachDingens(var ADingens: TDingens);
//Hier handelt es sich um die Original-Instanzvariable. Überschreibt man die,
//hat man auch in der aufrufenden Routine keinen Zugriff mehr auf die
//ursprüngliche Instanz
Weist man hier nun dem Parameter einen neuen Wert zu, betrifft das auch die Originalvariable, die somit in der aufrufenden Routine nicht mehr erreichbar ist. Bestenfalls bewirkt das lediglich ein Speicherleck, kann aber auch sehr viel schlimmer ausgehen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat