레퍼런스를 return하지 말라고 하는 이유는 뭔가요
조회수 4071회
1 답변
-
이런걸 말씀하시는 건가요?
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;
// 이것도 가능
댓글 입력