Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: Verwenden von Pointern

  Alt 28. Dez 2012, 16:11
Eigentlich funktioniert das genau wie mit einer Integer- oder String-Variable.
Eigentlich genau nicht, da nach so etwas hier dann verschiedene Werte in den Variablen stecken:

Delphi-Quellcode:
var
  str1, str2: String;
  int1, int2: Integer;
  obj1, obj2: TMyClass;
begin
  str1 := 'hallo';
  str2 := str1;
  str1 := 'bye';
  // hiernach ist str1 = 'bye' und str2 = 'hallo'

  int1 := 1;
  int2 := int1;
  int1 := 2;
  // hiernach ist int1 = 2 und int2 = 1

  obj1 := TMyClass.Create;
  obj1.SomeProperty := 1;
  obj2 := obj1;
  obj1.SomeProperty := 2;
  // hier hingegen sind obj1.SomeProperty und obj2.SomeProperty = 2
end;
Edit: Der Vollständigkeit halbar das ganze noch mit einem Record:
Delphi-Quellcode:
var
  rec1, rec2: TMyRec;
begin
  rec1.SomeValue := 1;
  rec2 := rec1;
  // bis hier hin sind rec1 und rec2 IDENTISCH, nicht nur gleich. Beide Variablen greifen auf den SELBEN Speicher zu
  rec2.SomeValue := 2;
  // Und hier greift dann compiler magic (copy-on-write genannt): Es wurde im Hintergrund eine Kopie angelegt. Nunmehr zeigt nur noch rec1 auf den anfänglichen Speicher, rec2 hat automatisch eine völlig eigene Instanz erhalten.
end;
Mit Strings läuft das übrigens eigentlich genau so ab.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium (28. Dez 2012 um 16:16 Uhr)
  Mit Zitat antworten Zitat