删除指针的后遗症
The after-effects of deleting a pointer
Object *p = new Object();
delete p;
当我删除p时,堆上的对象分配就被删除了。但是p本身究竟发生了什么?它是否已从堆栈中删除?还是它仍然在堆栈中,并且仍然包含以前保存Object的内存的地址?
p
仍在堆栈中,并保存您刚刚删除的Object
的地址。您可以自由地重用p
,将其分配给指向其他分配的数据或NULL
/nullptr
。
p
是一个变量,对吧。所以它的生存期是在编译时决定的,而不是在运行时。
这里的指针被称为悬空指针,这是一个你通常想不惜一切代价避免的怪物。
delete p
时。p
指向的内存被删除。
delete
~=析构函数+解除分配
这里delete
只是一个项,它表示内存被释放。对OS的内存总量或变量p
本身没有影响。p
仍然指向现在由系统回收的内存,因此成为悬挂指针。
指针变量持续存在,但其值无效-除了分配另一个有效指针或空指针外,对其执行任何操作都会产生未定义的行为。不能保证指针值不变。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- 删除指针的后遗症