상세 컨텐츠

본문 제목

함수의 지역변수는 레퍼런스로 리턴하지 마라. 이유는?

C++/기본

by nowpassion 2008. 5. 1. 11:35

본문

- 항상 레퍼런스는 무언가의 별칭이 되어야함

- 함수가 끝남과 동시에 지역변수는 메모리에서 사라짐

- 그러므로 지역변수의 레퍼런스를 리턴하면 레퍼런스가 가리킬 변수가 없어져 버린다.
 

/*4.cpp*/

#include <iostream>

using std::cout;
using std::endl;

//이경우는 문제가 없다.
//외부의 메모리를 포인팅하고 있으므로 리턴해도 무리가 없다.
int& Plus(int &num)
{
     ++num;
     return num;
}

// 이경우에는 문제가 발생한다.
// 함수 종료와 동시에 참조할 변수가 사라져 버린다. (dangling reference)
int& Plus2()
{
     int num = 2;
     int& numRef = num;
     ++numRef;
     return numRef;
}


int main()
{
    int x =4;
    Plus(x); // x의 메모리 주소로 포인팅
    cout << "before : " << x << endl;
       
    int &y = Plus2();
    cout << "after : " << y << endl;
    return 0;
}

'C++ > 기본' 카테고리의 다른 글

전처리기(preprocessor)  (0) 2008.05.01
할당 실패시 NULL포인터를 제공한다.이유는?  (0) 2008.05.01
const int&의 실용적 의미  (0) 2008.05.01
int* a와 a*와 차이  (0) 2008.05.01
선행선언(Foward Declaration)  (0) 2008.04.30

관련글 더보기