레퍼런스를 return하지 말라고 하는 이유는 뭔가요


왜 레퍼런스를 return하면 안 되는 건가요?

개인적으로 레퍼런스를 return 하는 코드를 많이 봤는데, 그럼 그 코드들은 다 잘못된 코드인가요?

  • 2016년 01월 25일에 작성됨

조회수 238


1 답변


좋아요
0
싫어요
채택취소하기

이런걸 말씀하시는 건가요?

int& getInt(void)
{
    int i;
    return i;
}

레퍼런스를 return받은 경우, 별도로 레퍼런스를 처리해 주지 않으면 스택에 레퍼런스가 계속 남아있기 때문에 레퍼런스를 return하지 않는게 좋습니다. 다음의 코드도 같이 보면,

int& getInt(void)
{
    int *i = new int;
    return *i;
}

두 코드에 대해 int& myInt = getInt(); // &를 명시해줌 int badInt = getInt(); // &가 없음 delete &myInt; // delete할 수 있음 delete &badInt; // badInt가 스택에 할당된 int를 복사하지만 이걸 delete할 방법이 없음

이기 때문이지요.

제가 생각하기에 포인터나 레퍼런스를 return하는 가장 좋은 방법은

int *getInt(void)
{
    return new int;
}

와 같이 쓰는 것입니다. 이제 그럼 return을 받은 쪽에서는

int *myInt = getInt(); // 포인터형으로 return받음 int& weirdInt = *getInt(); // 이 것도 쓸 수 있음 delete myInt; // 포인터니까 당연히 delete가능 delete &weirdInt; // 이것도 가능

  • 2016년 01월 25일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close