최상단 광고

2012년 4월 16일 월요일

[C++강좌] - 2-5. 레퍼런스와 함수 II

흐흑...
정말 죄송합니다;;
요즘 내신관리에 바쁜 나머지...

  *이 강좌는 C언어를 끝냈다는 가정하에 실시합니다.

┌───────────────┐
---앞으로의 목차---
2-5. 레퍼런스와 함수 II
2-6. new&delete
3-1. 구조체? 클래스?
└───────────────┘
<지난 강좌를 살펴보고 와주세요 !! : http://blog.naver.com/owndks98o/120156014435 >
2-5. 레퍼런스와 함수 II 
이번시간에는 레퍼런스를 리턴하는 함수를 배워봅시다!

먼저 소스코드를 드릴테니 한번 분석해 볼까요?

 /*
ref_return.cpp
*/
#include
using namespace std;

int& add(int &mum){
mum++;
return mum;
}

int main(){
int num=10;
int &x=add(num);

cout<
cout<

return 0;
}

꽤나 간단한 소스입니다. 보시면 이해가 되실거라고 생각합니다.
딱! 하나 레퍼런스를 리턴하는 부분을 뺸다면 말이죠.

함수와 함수의 호출을 보시면, 호출할때에 num이라는 변수를 주면, mum이라는 이름을 하나 더 만듭니다.
int& add(int &mum){
그리고 mum을 return할때에 x라는 새로운 이름이 하나를 더 받게 됩니다.

즉, 이 함수에서는 num==mum==x 가 되는 것이죠.

따라서 이 프로그램의 실행결과는 11 11 이 되게 됩니다.

하지만 하나! 조심해야 할 부분이 있습니다.
바로 지역변수를 레퍼런스로 리턴하는 경우입니다.

 #include
using namespace std;

int& turn(){
int num=10;
return num;
}

int main(){
cout<
return 0;
}

이럴경우 과연 어떻게 될까요?
아~주 큰일이 생기게 됩니다.

지역변수인 num은 함수의 호출이 종료되면 메모리 공간에서 사라지게 됩니다.
그후 그 메모리는 다른 변수나 함수가 사용하게 되지요.

그런데, 그 값을 리턴할경우, 받는 main함수 쪽에서는 제대로된 메모리를 받지 못하게 될수도 있다는 뜻이 됩니다.

설사, 제대로된 값이 나온다 해도 프로그램이 조금만 더 복잡해 지면 바로 값이 바뀔것이라 장담합니다.

따라서,
절대 지역변수를 레퍼런스로 리턴하면 안됩니다.

그럼 다음강 new&delete에서 뵙겠습니다^^


댓글 없음: