gpt4 book ai didi

c++ - 使用指针新建和删除

转载 作者:行者123 更新时间:2023-11-28 04:19:02 25 4
gpt4 key购买 nike

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

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

最佳答案

值(value)观是建在街道上的房子。

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

new int 进入运行时并要求它在某处找到一 block 新地 block ,将其 segmentation 为一个新属性,将其划分为开发区,然后 build 一个 int 房子在上面,然后返回新地段的地址。

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

调用 delete 并将街道地址传递给它,要求运行时转到该日志,拆除那里的 int,然后对其进行 dezone/desubdivide 以进行开发。指向的 int 消失了,但指针地址的所有其他拷贝都保留了下来。它们现在只是危险的废话,如果你试图去那个地址,你可能会在任何地方结束——在另一个不相关的 int 房子里,在一个购物中心的 parking 场里,因为那里建在那里,在废墟里- 散布在拆除现场,或者在你取消分区后建在该地点的核电站 react 堆中(你试图在那里写 7 导致它熔化)。

关于c++ - 使用指针新建和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55886224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com