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.