0

我想知道天气这是否合法

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

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

i=6;

取消分配内存后。

4

3 回答 3

1
i=6;

你不能再使用i了,因为它的内存被释放了。这类似于悬空指针的情况,其中指针本身指向不属于它的内存。

于 2013-08-29T04:12:35.130 回答
1

引用是对象的别名。初始化后,它的行为与引用对象的名称完全相同。在这种特殊情况下,引用为动态分配的对象命名。

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

于 2013-08-29T04:13:56.653 回答
-2

包括

使用 std::cout;

使用 std::endl;

主函数()

{

  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;

}

于 2013-08-29T04:31:48.607 回答