使用指针新建和删除

时间:2019-04-28 01:12:06

标签: c++ c++11

我试图了解以下代码是否实际上从内存中删除了对象

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不再在堆上?

1 个答案:

答案 0 :(得分:1)

价值是在街道上的地段上建造的房屋。

指针是写在一张纸上的街道地址(成批)。有时这些纸也很多。

new int进入运行时,要求它在某处找到新地段,将其细分为新属性,将其分区以进行开发,然后在其上构建int房子,然后返回地址的新批次。

int*周围的复印只不过是在有该地址的纸上进行复印。对其进行刻录(其地址中的变量x超出范围)对实际的“批次”或基于其构建的int无效。

调用delete并将街道地址传递给它,要求运行时转到该日志,在其中删除int,然后对其进行分区/再细分以进行开发。指向int的指针消失了,但是指针地址的所有其他副本仍然保留。它们现在只是危险的废话,如果您尝试去那个地址,您可能会到达任何地方-在另一间不相关的int房屋中,在自那以来建造的购物中心停车场中,进行碎石拆除站点,或者在将其分区之后将其放置在该位置上建造的核电站的反应堆中(并且尝试在其中写入7导致其融化)。