문제

C++에서는 참조를 통해 범위를 확장하는 것이 안전합니까?

코드에서 내가 의미하는 바는 다음과 같습니다.

MyCLass& function badIdea()
{
    MyClass obj1;
    ...
    return obj1;
}
도움이 되었습니까?

해결책

참조를 통해 범위를 확장하는 것은 안전하지 않습니다.C++의 객체는 obj1이 범위를 벗어날 때 참조 계산되지 않습니다. 이는 삭제됩니다. badIdea()의 결과를 참조하면 문제가 발생할 뿐입니다.

다른 팁

참조로 범위를 연장해도 괜찮은 곳은 const 참조 namespace 또는 함수 범위 (클래스 멤버가 아닌).

const int & cir = 1+1; // OK to use cir = 2 after this line 

이 트릭은 사용됩니다 Andrei Alexandrescu 's 매우 멋지다 범위 가드 캡처하기 위해 a const 콘크리트 범위 가드의 기본 클래스에 대한 참조.

당신이 의미하는 바를 명확히하십시오.

이 작업을 수행한다고 가정합니다.

int * p = NULL;
{
  int y = 22;
  p = &y;
}
*p = 77; // BOOM!

그렇지 않으면, 절대적으로, 스코프는 참조를 통해 확장되지 않습니다.

Boost 라이브러리의 스마트 포인터를보고 싶을 수도 있습니다. 클릭

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top