Einzelnen Beitrag anzeigen

Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Unterschied Pointer/Referenzvariablen

  Alt 1. Mär 2006, 20:51
Zitat von Frickeldrecktuxer_TM:
in delphi sind alle klassen die mit dem schlüsselwort "class" deklariert wurden bereits pointer auf die interne repräsentation der klasse.
wenn du jetzt einen pointer auf tsomeclass nimmst hast du also nicht nur einen pointer auf diese struktur sondern einen pointer auf einen pointer auf eine solche struktur. im normalen gebrauch macht das keinerlei sinn und bietet lediglich fehlerquellen. wo es aber sinn macht ist bei funktionsparametern:
Delphi-Quellcode:
procedure myProcedure(aObject: PSomeClass);
begin
  // hier kann ich den pointer dereferenzieren und auf die member zugreifen
  aObject^.SomeMethod;
  // oder ich kann ein anderes Objekt in meinen dereferenzierten Pointer stecken
  aObject^ := TSomeClass.Create;
end;
wäre aObject kein pointer so würde in der letzten lediglich die lokale kopie verändert werden. der aufrufer der myProcedure aufgerufen hat würde von der veränderung nichts mitkriegen. jetzt existiert aber nur eine lokale kopie des pointers nicht aber der objektreferenz. diese kann ich also ändern und der aufrufer wird entsprechend feststellen daß hinter dem pointer jetzt ein anderes objekt steckt.
das ganze ist syntaktisch gleichbedeutend mit einem var parameter:
Delphi-Quellcode:
procedure myProcedure(var aObject: TSomeClass);
begin
  aObject.SomeMethod;
  aObject := TSomeClass.Create;
end;
bei einem var parameter kann ich mir lediglich das dereferenzieren sparen der effekt ist aber der gleiche.
c++ kenntnisse können hier hilfreich sein da man dort eine klare trennung zwischen objekten und objektreferenzen hat.
Seit wann ist dem so??? Gerade wenn Du ein Objekt übergibst, wird das so gehandhabt als wäre der Parameter mit "var" deklariert worden. Das trifft nur auf einfache Datentypen zu nicht aber auf Objekte.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat