我试过下面的C++代码
#include <iostream>
using namespace std;
int main()
{
int *p = new int;
*p = 10;
int &a = *p;
delete p;
a = 20;
cout<<a<<" ";
cout<<*p;
return 0;
}
并得到输出:20 20
我认为这可能会由于访问释放的内存或一些垃圾而导致运行时错误。可能我得到了这个输出,因为程序释放的内存位置到目前为止可能还没有使用,所以仍然保留旧值。
所以我认为如果我不使用引用也应该发生
#include <iostream>
using namespace std;
int main()
{
int *p = new int;
*p = 10;
// int &a = *p;
delete p;
// a = 20;
// cout<<a;
cout<<*p;
return 0;
}
但在这种情况下,我得到的输出为 0(通过多次运行检查)。Reference 是否与不同的输出有关?
编译器:gcc 版本 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1)