#include <iostream>
using namespace std;
struct A
{
A()
: _p(new int(1))
{}
~A()
{
*_p = 0;
delete _p;
_p = nullptr;
}
int* _p;
};
int main()
{
//
// Let r_to_a reference to a temporary object
//
A& r_to_a = A();
//
// Is r_to_a still valid now?
//
cout << *r_to_a._p << endl; // Output : 1 instead of a run-time error
}
내가 알고 있었 듯이 임시 객체에 대한 비 const 참조는 부적절합니다. 그러나 위의 코드는 C++에서 합법적 인 것처럼 보입니다. 왜?임시 객체를 비 const로 참조하고 수명을 연장 할 수없는 이유는 무엇입니까?
제 컴파일러는 VC++ 2013
확장 기능을 명시 적으로 사용 중지해도 자체 헤더를 컴파일하지 못합니다. – rubenvb
@rubenvb : 확장 기능을 사용하지 않는 WindowsAPI 헤더를 컴파일하지 못할 수도 있습니다. 그러나 표준 헤더는 컴파일 가능해야합니다. (내가 틀렸다면 고쳐주세요.) – AnT
@AndreyT : 그것에 대해 거대한 행을 기억하고있을 것입니다. MSVC의 라이브러리 구현 자들은 어느 시점에서'/ Za'를 공식적으로 선언하지 않았습니다. 아마도'/ Za '모드에 버그가 있었기 때문일까? 나는 이것이 표준 라이브러리를 포함하고 있다는 인상하에 있었지만, 세부 사항 (또는 어떤 헤더인지)을 기억하지 못하고 그 이후로 수정되었을 수도 있습니다. –