首页 > 解决方案 > 使用指针新建和删除

问题描述

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

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

标签: c++c++11

解决方案


价值是建在街道上的房子。

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

new int转到运行时并要求它在某个地方找到一个新地段,将其细分为一个新属性,将其划分为开发区,然后int在其上建造房屋,然后返回新地段的地址。

复制int*周围只是复制带有该地址的纸。烧掉它(其中的地址变量x超出范围)对实际的“批次”或int构建在它上面没有影响。

调用delete街道地址并将其传递给它,要求运行时转到该日志,拆除int那里,然后将其分割/取消细分以进行开发。指向的-int消失了,但指针地址的所有其他副本仍然存在。它们现在只是危险的胡说八道,如果你试图去那个地址,你可能会在任何地方结束——在另一个不相关int的房子里,在一个购物中心的停车场里,在一个到处都是瓦砾的拆除现场,或者在在您取消分区后在该位置建造的核电站的反应堆(并且您试图在7那里写字导致它融化)。


推荐阅读