분명히 자바 프로그래머입니다! 우선, 당신은 수행해야합니다 c
는 "MyClass
포인터"입니다
MyClass* c = new MyClass("test");
하는 것으로 - new
표현이 당신에게 동적으로 할당 된 개체에 대한 포인터를 제공하기 때문에이 필요가.
이제 이것을 MyClass
인수를 사용하는 함수로 전달하려면 포인터를 역 참조해야합니다. 함수가 값에 의한 MyClass
(안 참조)이 걸리기 때문에, 객체가 함수에 복사됩니다
method(*c);
참고 : 그것은 당신이 할 것입니다. method
안에있는 MyClass
개체는 이전에 할당 한 개체의 복사본이됩니다. 인수의 유형은 함수가 수행하고 전달하고자하는 대상에 따라 달라집니다. 대신 함수 내부의 객체를 수정하면 함수 외부의 c
객체가 수정되므로 MyClass&
인수 (MyClass
참조)가 필요합니다. 당신이 인수 유형 MyClass*
될 가지고 있다면
, 당신은 간단하게 할 수있는 :
method(c);
포인터 c
함수에 복사됩니다 때문, 참조를 전달하는 당신에게 유사한 의미를 줄 것이다 포인터가 참조하는 객체는 여전히 동적으로 할당 된 MyClass
객체입니다. 즉, 함수 내부에서 *d
을 수정하면 c
이 가리키는 개체도 수정됩니다.
이렇게 원시 포인터를 전달하는 것은 일반적으로 좋은 방법이 아닙니다. 이 함수는 포인터가 null이 아니라는 것을 명시 적으로 확인해야합니다. 그렇지 않으면 프로그램이 특정 조건 하에서 충돌 할 수 있습니다. 참조를 통한 시맨틱을 원한다면 참조 유형을 사용하십시오.
그러나 처음에는 MyClass
개체를 동적으로 할당하지 않는 것이 좋습니다. 당신이 자바로 많이했기 때문에 당신은 new
만을 사용하고있는 것 같습니다. C++에서 new
식은 에 동적으로 개체를 할당하는 데 사용됩니다. 종종 동적으로 객체를 할당하고 싶지는 않습니다. 당신과 같이 할 것입니다 자동 저장 기간, 함께 만드는 완벽하게 괜찮 :
MyClass c("test");
method(c);
그것은 당신이 좋은 이유가없는 포인터와 동적 할당을 방지하기 위해 C++에서 아주 좋은 연습 간주됩니다. 오류 및 버그가 많은 더 복잡한 코드로만 안내합니다. 사실 delete c;
이 아니기 때문에 이미 제공 한 코드에 문제가 있습니다. 방금 제안한대로 수행하면 범위를 벗어날 때 개체가 파괴되므로 명시 적으로 삭제할 필요가 없습니다.
달성하려는 작업은 무엇입니까? 메모리가 걱정된다면, 필요한 것에 따라'method (MyClass & c)'또는'method (const MyClass & c)'를 시도해보십시오. – RageD
그것은 당신이하려는 일에 달려 있습니다. –
당신은'MyClass * c = new MyClass ("test")를 의미 했습니까? –