c ++程序在崩溃时会自动释放内存吗?

时间:2011-09-19 14:57:58

标签: c++ exception memory

我在Google c ++编码标准中读到Google不使用异常。如果未使用异常,如何在程序中发生错误时释放内存?

例如,f()调用g(),如果g()中有错误,我应该释放g()中分配的所有内存,然后调用f()的异常。一旦f()捕获异常,f()将释放f()中分配的所有内存,并退出程序。

如果没有使用异常,并且如果g()中有错误,我可以强制退出exit(0),并且c ++程序是否足够智能以释放所有已分配的内存?我的猜测是,因为c ++维护堆栈和堆,一旦程序退出,c ++会自动释放堆栈和堆吗?

2 个答案:

答案 0 :(得分:9)

当进程因任何原因终止时,操作系统会清除所有使用过的内存和文件句柄。

答案 1 :(得分:-1)

我听说有些内存类型,比如在Windows上,COM全局堆内存无法为你释放。但是,大多数内存/句柄都会被清除,因为操作系统必须应对应用程序崩溃的情况。在进程本地内存和大多数句柄(如文件句柄等)的情况下,您当然可以保证它。在一般情况下,您可以假设操作系统将在您退出应用程序后进行清理。

此外,请不要遵循Google的风格指南。它不适用于C ++,它适用于C ++减去你必须拿走的所有东西来制作它。它可能适用于谷歌(可疑),但它绝对不适用于其他任何人。