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.