我在Google c ++编码标准中读到Google不使用异常。如果未使用异常,如何在程序中发生错误时释放内存?
例如,f()调用g(),如果g()中有错误,我应该释放g()中分配的所有内存,然后调用f()的异常。一旦f()捕获异常,f()将释放f()中分配的所有内存,并退出程序。
如果没有使用异常,并且如果g()中有错误,我可以强制退出exit(0)
,并且c ++程序是否足够智能以释放所有已分配的内存?我的猜测是,因为c ++维护堆栈和堆,一旦程序退出,c ++会自动释放堆栈和堆吗?
答案 0 :(得分:9)
当进程因任何原因终止时,操作系统会清除所有使用过的内存和文件句柄。
答案 1 :(得分:-1)
我听说有些内存类型,比如在Windows上,COM全局堆内存无法为你释放。但是,大多数内存/句柄都会被清除,因为操作系统必须应对应用程序崩溃的情况。在进程本地内存和大多数句柄(如文件句柄等)的情况下,您当然可以保证它。在一般情况下,您可以假设操作系统将在您退出应用程序后进行清理。
此外,请不要遵循Google的风格指南。它不适用于C ++,它适用于C ++减去你必须拿走的所有东西来制作它。它可能适用于谷歌(可疑),但它绝对不适用于其他任何人。