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

What does "delete" actually do in c++?

本文关键字:什么 delete C++ 实际上      更新时间:2023-10-16

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

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

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

如果我只是以这种方式删除对象,指针将失效,并且我的程序确实崩溃。所以,我认为我应该使用 delete 命令调用析构函数,并在析构函数中采取进一步的步骤,实际执行清理并确保引用此对象的其他对象知道指针确实无效。

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

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

因此,您的程序很可能与谁"拥有"指针存在问题。 不应在程序中其他位置仍在使用的指针值上调用delete