흐흑...
정말 죄송합니다;;
요즘 내신관리에 바쁜 나머지...
┌───────────────┐
---앞으로의 목차---
2-5. 레퍼런스와 함수 II
2-6. new&delete
---앞으로의 목차---
2-5. 레퍼런스와 함수 II
2-6. new&delete
3-1. 구조체? 클래스?
└───────────────┘
└───────────────┘
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에서 뵙겠습니다^^
댓글 없음:
댓글 쓰기