2012-04-10 8 views
2

Ich sehe eine Funktionsdefinition, dieC++ Referenzen, Adressen Zeiger

ClassName::Read(myObjectClass &temp) 

wie folgt aussieht Ich versuche, es so zu nennen:

myObjectClass *myObj; 
ClassName::Read(&myObj); 

aber das ist falsch. Wie nennt man das am besten? Es muss vom Typ myObjectClass&

+0

Seien Sie vorsichtig, wenn das Objekt 'myObj' nicht in der aufrufenden Funktion (z. B. neue myObjectClass) erstellt wird, wird der Lesevorgang auf eine nicht definierte Adresse schreiben. – guga

Antwort

5

Wie James richtig darlegt, die korrekte Syntax ist *myObj. Der Punkt ist, dass &myObj Ihnen die Adresse myObj gibt, die eine Art myObjectClass** hat. Sie möchten stattdessen dereferenzierenmyObj auf die Instanz von myObjectClass, auf die es zeigt, daher verwenden Sie *.

Im Übrigen würde die Verwendung von *myObj momentan undefiniert sein, da myObj selbst nicht initialisiert wurde. Wenn Sie dynamisch keine myObjectClass zuweisen müssen, könnten Sie besser dran das sein gerade tun:

myObjectClass myObj; 
ClassName::Read(myObj); 

Wenn die dynamische Zuordnung ist ein Muss, dann können Sie tun, zum Beispiel

myObjectClass *myObj = new myObjectClass; 
ClassName::Read(*myObj); 
//... 
delete myObj; 
9

so sein:

ClassName::Read(*myObj); 
0

Auf diese Weise

myObjectClass myObj; 
ClassName::Read(myObj); 

Sie haben überall keine Zeiger und dynamische Zuordnung zu verwenden. C++ ist nicht Java.