#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++ では合法であるように思われることを示しています。なんで?
私のコンパイラは VC++ 2013 です。