考虑以下计划:
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
现在应该引用未定义的内存位置,因为前一个不存在。但是当我运行这个程序时,我通过参考cygwin / linux上的g ++和VC ++ 2012 express来获取更新的值和地址。
但是,如果ptr 未已删除,则ref
不会更新,输出会显示旧值10和旧地址。这种行为是标准的还是特定于编译器的?如果是标准,那么为什么ref
的更新取决于是否删除ptr
?
答案 0 :(得分:2)
它只是内存分配器正常工作的方式。在您的代码中:
delete ptr;
ptr = new int(100);
删除一个int
,然后立即要求换一个新{{1}}。运行时说&#34;好,有这个。它刚刚推出&#34;。
简单回收。