2012-04-10 7 views
2

나는 다음과 같이 호출하기 위해 노력하고있어이C++ 참조, 주소, 포인터는

ClassName::Read(myObjectClass &temp) 

과 같은 함수 정의를 참조하십시오

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

을하지만 그건 잘못된 것입니다. 그것을 호출하는 적절한 방법은 무엇입니까? 이 형이 같이 myObjectClass&

+0

'myObj'객체가 호출 함수 (예 : new myObjectClass)에 만들어지지 않은 경우 읽기는 정의되지 않은 일부 주소에 쓸 것이라는 점에주의하십시오. – guga

답변

5

, 올바른 구문은 *myObj입니다. 요점은 &myObjmyObj의 주소를 제공하며 종류는 myObjectClass**입니다. 대신 을 역 참조myObj으로 지정하여 myObjectClass의 인스턴스를 얻으므로 *을 사용합니다.

덧붙여 말하자면, *myObj을 사용하면 myObj 자체가 초기화되지 않았기 때문에 정의되지 않은 동작이 발생합니다. 동적 할당이 필수입니다

myObjectClass myObj; 
ClassName::Read(myObj); 

경우에, 당신은 예를 들어, 작업을 수행 할 수 있습니다 동적으로 myObjectClass를 할당 할 필요가없는 경우, 당신은이 일을 더 나을 수 있습니다

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

될 필요가있다 : 제임스가 올바르게 지적한대로

ClassName::Read(*myObj); 
0

당신은 모든 곳에서 포인터와 동적 할당을 사용할 필요가 없습니다

myObjectClass myObj; 
ClassName::Read(myObj); 

이 방법. C++은 Java가 아닙니다.