C++ 中的“删除”实际上做了什么?

Lem*_*bon 3 c++

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

Obj* object = new Obj();
delete object;
Run Code Online (Sandbox Code Playgroud)

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

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

dbu*_*ush 5

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

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

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