C++에서는 참조를 통해 범위를 확장하는 것이 안전합니까?
문제
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 라이브러리의 스마트 포인터를보고 싶을 수도 있습니다. 클릭
제휴하지 않습니다 StackOverflow