我试图了解以下代码是否实际上从内存中删除了对象
在delete z
期间实际删除了什么?
动态创建的整数x是否会被删除?
y和z也被删除吗?
我已经运行了该程序,当我指定x y和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不再在堆上?
答案 0 :(得分:1)
价值是在街道上的地段上建造的房屋。
指针是写在一张纸上的街道地址(成批)。有时这些纸也很多。
new int
进入运行时,要求它在某处找到新地段,将其细分为新属性,将其分区以进行开发,然后在其上构建int
房子,然后返回地址的新批次。
int*
周围的复印只不过是在有该地址的纸上进行复印。对其进行刻录(其地址中的变量x
超出范围)对实际的“批次”或基于其构建的int
无效。
调用delete
并将街道地址传递给它,要求运行时转到该日志,在其中删除int
,然后对其进行分区/再细分以进行开发。指向int
的指针消失了,但是指针地址的所有其他副本仍然保留。它们现在只是危险的废话,如果您尝试去那个地址,您可能会到达任何地方-在另一间不相关的int
房屋中,在自那以来建造的购物中心停车场中,进行碎石拆除站点,或者在将其分区之后将其放置在该位置上建造的核电站的反应堆中(并且尝试在其中写入7
导致其融化)。