我想知道这是合法与否的天气
#include<iostream>
using namespace std;
int main()
{
int &i=*(new int(8) );
cout<<i<<endl;
delete &i;
return 0;
}
引用变量引用动态分配内存,然后我们可以使用delete取消分配内存。这个变量是“i”并且可以再次重复使用,或者如果我们尝试为“i”分配一些值。
i=6;
取消分配内存后。
答案 0 :(得分:1)
i=6;
您不能再使用i
,因为它的内存已被释放。这与悬空指针的情况类似,指针本身指向不属于它的内存。
答案 1 :(得分:1)
引用是对象的别名。初始化后,它的行为就像它是引用对象的名称一样。在这种特殊情况下,引用为动态分配的对象命名。
显示的代码是正确且有保证的,但我建议不要这样做。通过引用获取对象的地址删除对象后,最终会得到悬空引用,即引用死对象的名称和释放的内存。 <{1}}之后应用于i
的任何操作都必然会导致未定义的行为。
答案 2 :(得分:-2)
使用std :: cout;
使用std :: endl;
int main()
{
int *p=new int(8);
//p points int(8)
cout<<"*p="<<*p<<endl;
delete p;
//p points null
int i = 10;
//p points i
p = &i;
cout<<"*p="<<*p<<endl;
return 0;
}