더북(TheBook)

1.8.6 오래된 데이터를 참조하지 마라!

함수 내의 지역 변수는 함수 스코프 내에서만 유효하다. 예를 들면, 다음과 같다.

double& square_ref(double d) // 이렇게 하지 마라!
{
    double s = d * d;
    return s;
}

여기서 square_ref의 함수 결과는 더 이상 존재하지 않는 지역 변수 s를 참조한다. 저장되어 있던 메모리가 아직 남아 있으며, 우연히 (실수로) 덮어 쓰지 않았을 수도 있다. 그러나 우리가 믿을 수 있는 것은 아무것도 없다. 실제로 숨겨진 오류는 특정 조건에서만 프로그램에 크래시가 발생하기 때문에 명백하게 발생하는 오류보다 훨씬 좋지 않으며, 이런 경우 원인을 찾기가 매우 어렵다.

이러한 레퍼런스를 부실 레퍼런스(Stale Reference)라고 한다. 좋은 컴파일러는 우리가 지역 변수를 참조할 때 경고 메시지를 보낼 것이다. 안타깝게도 웹 튜토리얼에서 이러한 예를 본 적이 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.