引用变量可以访问动态分配的内存
Reference variable have access to dynamically allocated memory
我想知道这是不是合法的
#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;
}
相关文章:
- 删除类成员的动态分配内存的最佳方法是什么
- 如果您为类的一个对象动态分配内存作为参数,会发生什么
- 为浮点数组动态分配内存
- 包含动态分配内存作为值的映射的取消定位速度有多快?
- STD分配器是否会在堆上动态分配内存?它可以安全地删除内存吗?
- 如何为const char double指针(使用新的)动态分配内存
- 在动态分配内存的同时,使用指定尺寸
- 动态分配内存
- 如何在我指向的安德烈斯上动态分配内存?
- 为什么C 没有方便的方式来为多维数组动态分配内存
- 当动态分配内存时警告
- 为结构动态分配内存
- 动态分配内存,用于存储使用 WinHttpReadData 下载的 HTML 源代码
- 如何在C++中为灵活阵列动态分配内存
- 从C++中的文件读取时动态分配内存到结构
- 在c++中的赋值运算符重载方法中删除旧的动态分配内存
- 在类方法中使用新运算符动态分配内存的寿命和范围是多少
- 以C++为单位的动态分配内存的初始值
- 虚拟析构函数:如果基类动态分配内存,基类中是否需要它
- 如何在 c++ 中使用 2-D 固定数组为 4-D 数组动态分配内存