当c++程序结束时,指针会从内存中释放吗

are pointers released from memory when c++ program end?

本文关键字:内存 释放 指针 程序 c++ 结束      更新时间:2023-10-16

这是一个初学者的问题,但我用c#学习了编程,现在我正在学习c++,现在我在处理指针,我知道当我处理完它们时,我必须将它们从内存中释放出来,但当程序关闭时,它们是从内存中删除还是留在那里?

当程序结束时,它使用的所有内存(无论是否动态分配)都会返回到操作系统。不管它是C程序、C++程序、C#程序还是你可能正在编写的任何其他类型的程序。

现在,操作系统将回收内存并不意味着你可以对内存管理漠不关心。当你的程序运行时,你应该设法释放你用完的内存。不这样做会导致"内存泄漏",这些肯定会影响你的程序及其运行的系统,至少在你的程序运行时是这样。

请注意,需要解除分配的不是指针,而是指向的对象。

答案取决于指针指向的内存类型:

  • 如果指针指向自动对象,则对象将被隐式清理
  • 如果指针指向使用newnew []malloccalloc动态分配的对象,则需要通过重新调用deletedelete []free来显式释放这些对象

请注意,建议谨慎使用动态分配,如果必须,请使用智能指针而不是原始指针。

编辑:
如果您的问题是:
如果程序没有释放内存并退出,会发生什么

答案是:
操作系统回收它。操作系统只是收回它分配给一个进程的所有内存,它不知道你的程序是否泄露了内存
但自己收拾残局总是一个好办法
如果你有一个类的析构函数确实有副作用的代码,那么不在动态分配的指针上调用delete会导致Undefined Behavior,这会使你的代码完全取决于编译器。

您分配的内存(例如使用New关键字)将保留在那里,除非您删除它!如果你谈论的是指针本身,那么是的!在程序结束时,指针将被擦除!