考虑以下程序:
include <iostream>
using namespace std;
int main()
{
int *ptr = new int(10);
int &ref = *ptr;
cout << ref << endl << &ref << endl;
delete ptr;
ptr = new int(100);
cout << ref << endl << &ref << endl;
return 0;
}
输出:
10
0x80010348
100
0x80010348
这里的ref
变量是对指向的内存位置的引用ptr
。但是,当ptr
删除指针并分配新的内存位置时,ref
现在应该引用未定义的内存位置,因为以前的内存位置不存在。但是当我运行这个程序时,我通过 ref 和 cygwin/linux 上的 g++ 以及 VC++2012 express 获得了更新的值和地址。
但是,如果 ptr没有被删除,则ref
不会更新,并且输出显示旧值 10 和旧地址。这是行为标准还是特定于编译器?如果它是标准的,那么为什么更新ref
取决于是否ptr
被删除?