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

Reference variable have access to dynamically allocated memory

本文关键字:动态分配 内存 访问 变量 引用      更新时间:2023-10-16

我想知道这是不是合法的

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

引用变量引用了一个动态分配的内存,然后我们可以使用delete来取消分配内存。这个变量是"i"并再次被重用吗?或者如果我们试图给"i"分配一些值会怎么样。

i=6;

在取消分配内存之后。

i=6;

您不能再使用i了,因为它的内存已释放。这类似于悬挂指针的情况,即指针本身指向不属于它的内存。

引用是对象的别名。初始化后,它的行为就像它是被引用对象的名称一样。在这种特殊情况下,引用为动态分配的对象提供一个名称。

如图所示的代码是正确且有保证的,尽管我建议不要这样做。通过引用获取对象的地址来删除对象后,您最终会得到一个悬空引用,也就是说,一个引用死对象的名称,以及释放的内存。在delete之后应用于i的任何操作都必然会导致未定义的行为。

include

使用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;

}