Hi,
es geht mir um die Übergabe komplexer Variablen (Objekten) in Prozedur-/Funktionsaufrufen.
Ich habe folgende Vermutungen, bin aber nicht ganz sicher, ob sie so stimmen.
Gehen wir von folgendem Beispielcode aus (TObj sei ein komplexes Objekt):
Delphi-Quellcode:
procedure proc1()
var
var1: TObj;
begin
var1 := TObj.create();
proc2(var1);
end;
Fall 1:
procedure proc2(a: TObj)
--> Ich kann jetzt etwas am Objekt ändern (
a.caption:='aa'
) nicht aber das Objekt komplett austauschen (
a:=TObj.create();
) sodass dies auch Auswirkungen auf proc1 hätte (var1 zeigt immer noch auf das ursprüngle TObj.), da ein Kopie des Objektzeigers bei der Übergabe angelegt wurde.
Fall 2:
procedure proc2(var a: TObj)
--> Ich kann jetzt sowohl etwas am Objekt ändern (
a.caption:='aa'
) wie auch das Objekt komplett austauschen (
a:=TObj.create();
) sodass dies auch Auswirkungen auf proc1 hat (hier wurde also auch var1 "ausgetauscht") - der "Original-Zeiger" wurde also übergeben.
Fall 3:
procedure proc2(const a: TObj)
--> Ich kann jetzt etwas am Objekt ändern (
a.caption:='aa'
) nicht aber das Objekt komplett austauschen (
a:=TObj.create();
) - hier schmeißt mir der Compiler es um die Ohren, da ich versuche, etwas konstantes zu verändern.
Stimmt das soweit?
Falls ja, so ist der Unterschied zwischen Fall 1 und Fall 3 doch recht gering, oder? Zumindest nach "außen" (also aus Sicht von proc1).
Kann dazu noch jemand etwas mehr sagen?
Dann eine weitere Nachfrage:
Auch in Fall 3 ist es ja so, dass ich weiterhin Änderungen am Objekt vornehmen kann, oder?
Also const ist lediglich der Zeiger auf das Objekt - nicht aber der "Inhalt" des Objektes selbst - richtig?
LG, Frederic