2012-03-05 4 views
0

필자가 쓰고있는 네트워킹 프레임 워크가 있습니다 (UDP를 통한 안정적인 계층 구현). 이 패킷 개체에 대한 포인터를 받아들이는 함수를 받았습니다. 그런 다음 네트워크 프레임 워크는 패킷을 수신하기위한 전체로드를 수행하고 패킷 포인터의 값을이 패킷으로 설정합니다. 그러나 이것은 몇 가지 기능이 깊숙이 발생합니다. 그래서 기본적으로 궁금 무슨 일이 나를 위해이 작품 같은 것을하지 않는 이유입니다 :포인터를 함수를 통해 깊고 깊게 전달

void Main() 
{ 
    int* intPointer = NULL; 
    SomeFunction(intPointer); 
    //intPointer is still null? 
} 
void SomeFunction(int* outInt) 
{ 
    SomeOtherFunction(outInt); 
} 

void SomeOtherFunction(int* outInt) 
{ 
    outInt = new int(5); 
} 

답변

5

SomeOtherFunction 값으로 포인터를 통과, 그래서 할당 전용 (아주 기본적인 예는 내가 무슨 뜻인지를 보여주는) 전달 된 주소의 복사본을 변경합니다.

void Main() 
{ 
    int* intPointer = NULL; 
    SomeFunction(intPointer); 
    //intPointer is still null? 
} 
void SomeFunction(int*& outInt) 
{ 
    SomeOtherFunction(outInt); 
} 

void SomeOtherFunction(int*& outInt) 
{ 
    outInt = new int(5); 
} 

는, 반환 값을 사용에 문제가 있음을 미루어 보아 :

참조하여 포인터를 전달,이 일을하려면?

void Main() 
{ 
    int* intPointer = SomeFunction(intPointer); 
    //intPointer is still null? 
} 
int* SomeFunction() 
{ 
    return SomeOtherFunction(); 
} 

int* SomeOtherFunction() 
{ 
    return new int(5); 
} 

[다음 설명을 업데이 트하십시오. ]

글쎄, 당신은 아마도 정수 읽은 여부를 나타내는 상태를 나타내는 반환 값이있는 경우, 당신은 정말 (특정 상태에 대한 자리로 bool 사용)되어 원하는 다음 무엇을 :

void Main() 
{ 
    int intPointer = 0; 
    if (SomeFunction(intPointer) == true) 
    { 
     // read something 
    } 
    else 
    { 
     // failed to read. 
    } 
} 
bool SomeFunction(int& outInt) 
{ 
    return SomeOtherFunction(outInt); 
} 

bool SomeOtherFunction(int& outInt) 
{ 
    outInt = 5; 
    return true; 
} 
+0

반환 값은 실제로 ReceiveStatus와 같습니다 (ReceiveStatus :: Successful을 반환합니다). 그래서 나는 전송의 상태와 동시에 수신 된 패킷을 반환하지 않습니다. 어쨌든 그 남자에 대한 감사! – Prodigga

0

SomeOtherFunction 및 SomeFunction에 대한 참조로 전달 된 빈 std :: auto (unique) _ptr을 사용하는 것이 더 좋습니다. SomeFunction 예외가 발생하면 SomeOtherFunction에 할당 된 메모리에 대한 메모리 누수가 발생하지 않습니다.

관련 문제