我想知道天气这是否合法
#include<iostream>
using namespace std;
int main()
{
int &i=*(new int(8) );
cout<<i<<endl;
delete &i;
return 0;
}
引用变量正在引用动态分配的内存,然后我们可以使用 delete 取消分配内存。这个变量是“i”并再次被重用,或者如果我们尝试为“i”分配一些值怎么办。
i=6;
取消分配内存后。
我想知道天气这是否合法
#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
了,因为它的内存被释放了。这类似于悬空指针的情况,其中指针本身指向不属于它的内存。
引用是对象的别名。初始化后,它的行为与引用对象的名称完全相同。在这种特殊情况下,引用为动态分配的对象命名。
所示代码是正确且有保证的,尽管我不建议这样做。通过引用获取对象的地址来删除对象后,您最终会得到一个悬空引用,即一个引用死对象的名称,并释放内存。i
在之后应用的任何操作delete
都必然会导致未定义的行为。
使用 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;
}