引用变量可以访问动态分配的内存

时间:2013-08-29 04:02:25

标签: c++

我想知道这是合法与否的天气

#include<iostream>
using namespace std;
int main()
{
    int &i=*(new int(8) );
    cout<<i<<endl;
    delete &i;
    return 0;
} 

引用变量引用动态分配内存,然后我们可以使用delete取消分配内存。这个变量是“i”并且可以再次重复使用,或者如果我们尝试为“i”分配一些值。

i=6;

取消分配内存后。

3 个答案:

答案 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;

}