C++에서 참조를 통해 범위를 확장하는 것이 안전합니까? 코드에서C++에서 참조를 통해 범위를 확장하는 것이 안전합니까?
, 무슨 뜻입니다 :
MyCLass& function badIdea()
{
MyClass obj1;
...
return obj1;
}
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
이 트릭은 구체적인 범위 가드의 기본 클래스에 const
참조를 캡처하기 위해 Andrei Alexandrescu's 아주 멋진 scope guard에 사용됩니다.
참고 살아 할당 된 개체를 계속 할 수있는 메커니즘을 암시하려고했다, 용어 "레퍼런스 카운팅은"문제를 muddies 방법을 볼 수 있습니다 임시의 대개 매우 좁은 "범위"가 부모 범위로 확장되어 OP가 묻는 것과 상당히 다른 것을 느낄 수 있습니다. C + +의 조금 알려진면을 언급하면서 많은 사람들이 처음에는 혼란스러워한다는 명성을 얻었습니다. – philsquared
질문은 C++ 및 참조 바인딩에 관한 것입니다. 참조 횟수가 입력되지 않습니다. 나는 내 자신의 대답을 추가했지만 간단히 참조 바인딩을 통해 객체의 범위를 확장 할 수 있지만 디자인에는주의를 기울여야합니다. 당신이 그것을 이해하지 못하면 그것을하지 마십시오. –
는 나는 당신이 * * 로컬 객체 참조 카운트를 (C++ 물론 그들 중 하나를,없는)를 지원하는 언어로 범위를 벗어난하지 않고 참조를 반환 할 수있는 방법이기 때문에 그가 계산을 참조 언급 생각합니다. –
난 내가 다른 언어가이 만에 "범위 확장"입니다, 아마 좋은 생각 –