c++ - 使用指针新建和删除
问题描述
我试图了解以下代码是否实际上从内存中删除了一个对象
期间delete z
实际删除了什么?动态创建的整数 x 会被删除吗?y 和 z 也会被删除吗?
我已经运行了程序,当我计算 xy 和 z 时会输出不同的值
#include <iostream>
using namespace std;
int main()
{
int* x = new int;
*x=1;
int* y = x;
int* z = y;
delete z;
return 0;
}
我假设变量 x 不再在堆上?
解决方案
价值是建在街道上的房子。
指针是写在一张纸上的街道地址(指向地段)。有时这些纸片也很多。
new int
转到运行时并要求它在某个地方找到一个新地段,将其细分为一个新属性,将其划分为开发区,然后int
在其上建造房屋,然后返回新地段的地址。
复制int*
周围只是复制带有该地址的纸。烧掉它(其中的地址变量x
超出范围)对实际的“批次”或int
构建在它上面没有影响。
调用delete
街道地址并将其传递给它,要求运行时转到该日志,拆除int
那里,然后将其分割/取消细分以进行开发。指向的-int
消失了,但指针地址的所有其他副本仍然存在。它们现在只是危险的胡说八道,如果你试图去那个地址,你可能会在任何地方结束——在另一个不相关int
的房子里,在一个购物中心的停车场里,在一个到处都是瓦砾的拆除现场,或者在在您取消分区后在该位置建造的核电站的反应堆(并且您试图在7
那里写字导致它融化)。
推荐阅读
- wpf - 如何转换边框而不是里面的内容?
- c++ - 两包可变参数模板参数
- sql - 插入具有计算值和默认值的表
- excel - 用环绕Excel VBA填充对角矩阵
- python - 主窗口中的多个 QGraphicsView 和 QGraphicsScene
- knative-serving - knative 可以通过 Kubernetes Server 删除已部署的应用吗?
- java - 通过 whatsapp 共享 mp3(不支持此文件)错误
- rest - 在 REST 中实现 PUT 的正确方法是什么?
- python - 从另一个文件中数学减去一个文件中的值
- c++ - 忽略 OpenMP 任务依赖性?