, 나는 해야받는 새로운 덕분 생성의 메인 코드에서 A와 B새로운 포인터 참조로 주조해야 내가이 개 수업을
class A:
{
public:
//Some functions
A *getNewA() const;
private:
//some attributes
}
class B:
{
public:
//Some functions
private:
A &reftoA;
}
을 부르 자 A :: getNewA() 메소드.
A *A::getNewA()
{
A *newA = new A;
return newA;
}
OK : 그리고이 은 클래스 B. 여기
에 기록 된대로, B :: reftoA로는 A :: getNewA() 메소드가되어 가야한다. 따라서 지금은 getNewA를 호출 reftoA에 결과를 저장할, I이 했어야 생각
B::foo(A ¶mA)
{
reftoA = *(paramA.getNewA());
}
(파라미터로서 참조를 취할)는 B 기능에서 A.에 참조 인 작동하지만, 그렇지는 않습니다. 역 참조 할 때 reftoA는 항상이 객체를 취하고 새로 할당 된 객체를 취하지 않기 때문에.
의가 명확하게하자의이 결과
여기A * A::getNewA()
{
A *newA = new A;
std::cout << "New pointer " << newA << std::endl;
std::cout << "this pointer" << this << std::endl;
return A;
}
void B::foo(A ¶mA)
{
reftoA = *(paramA.getNewA());
std::cout << "new generated pointer " << &reftoA << std::endl;
}
출력 중 하나입니다 출력 기능을 수정할 수 :
New pointer : 004FFAEC
this pointer: 0069D888
New generated pointer : 0069D888 //Expected : 004FFAEC
나는 일이 "새로운 생성 된 포인터"를 얻을 수 없다 메모리를 할당 한 후 A :: getNewA()가 반환하는 새 포인터와 동일합니다. 물론 포인터를 역 참조하여 포인터를 참조에 저장하는 것이 좋습니다. 참조는 기존 객체와 함께 사용됩니다. 어쩌면 새로운 객체 A :: getNewA()가 예상대로 작동하지 않을 메모리를 할당해야합니다.
내가 대신 B에서 참조 포인터를 사용할 수:: foo는(), 나도 알아,하지만 내가 할 수없는 내가에 refrence와 포인터에 대해 뭔가 오해하고 있어요,하지만 난하지 않는 생각
무엇을 알고.
큰 도움이된다면
대기를 사용할 수 있습니다, 무엇을? 'return A'? 그게 어떻게 지어 집니까? 우리에게 보여줄 수있는 [Minimal, Complete, Verifiable Example] (http://stackoverflow.com/help/mcve)을 만드시겠습니까? –
또한 메모리 누수가 있습니다. 'getNewA'에 의해 리턴 된 포인터를 버리고 (사실,'newA'를 리턴한다고 가정), 실제로'delete' 할 것이 없습니다. –
마지막으로, 문제의 가능한 원인은 다음과 같습니다. * 참조를 다시 할당 할 수 없습니다 *. 당신이하는 일은 * * * object *를 지정하는 것입니다. 당신은 효과적으로'reftoA.operator = (* (paramA.getNewA()))' –