0
다음 코드는 안전한가요? 범위를 벗어난 참조가 아무 것도 가리 키지 않습니까?
class B {
public:
int& b;
B (int& _b) :
b(_b) {}
};
B* foo() {
int a;
return new B(a);
}
는 아무것도 foo는 점에 의해 반환 된 객체의 참조는 컴파일 그림이을 (INT A를하기 때문에 범위를 벗어난 것입니다) 또는 수행 할 것인가?
'B :: b'는'foo()'가 반환 할 때 더 이상 존재하지 않는 지역 변수 인'a'가 이미 존재하는 것처럼 매달려 있습니다. – hmjd
17.6.4.3.2/2를 참조하십시오. * 밑줄로 시작하는 각 이름은 전역 이름 공간에서 이름으로 사용하기위한 구현에 예약되어 있습니다. *. 대신에'b_'를 사용하십시오. – dirkgently
@dirkgently, 해당 이름은 전역 네임 스페이스에 없으며 이름은 ok –