gpt4 book ai didi

c++ - "delete"在 C++ 中实际上做了什么?

转载 作者:行者123 更新时间:2023-12-01 12:03:02 29 4
gpt4 key购买 nike

我不确定命令 delete 在 C++ 中到底做了什么?据我所知,要释放内存,我必须对对象使用 delete,我之前使用 new 实例化了这些对象,例如:

Obj* object = new Obj();
delete object;

但是 delete 实际上是从我的对象中删除数据,它是否以任何方式改变了对象和对象本身内部的数据,或者它只是调用了相应的析构函数?如果析构函数为空,使用 delete 是否会对对象产生任何影响?这个问题的原因如下:

如果我只是这样删除对象,指针就会失效,我的程序就会崩溃。因此,我认为我应该只使用 delete 命令调用析构函数,并在析构函数内部采取进一步的步骤来实际进行清理,并确保引用该对象的其他对象知道该指针确实无效。

最佳答案

除了调用析构函数外,delete 运算符还会释放之前由 new 分配的内存。此内存返回到可以分配的可用内存池。

这也意味着 object 现在指向无效内存,任何尝试使用它或任何其他指向它的指针都将调用 undefined behavior .这可能就是您的程序中发生的情况。

因此您的程序很可能对谁“拥有”指针存在疑问。您不应该对仍在程序中其他地方使用的指针值调用 delete

关于c++ - "delete"在 C++ 中实际上做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60132119/

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