c++程序在崩溃时是否自动释放内存?
Does a c++ program automatically free memory when it crashes?
我在Google c++编码标准中读到Google不使用exception。如果不使用exception,当程序中出现错误时,如何释放内存?
例如,f()调用g(),如果g()中有错误,我应该释放在g()中分配的所有内存,然后调用f()的异常。一旦f()捕获异常,f()将释放在f()中分配的所有内存,并退出程序。
如果不使用exception,如果g()中有错误,我可以强制退出exit(0)
吗? c++程序是否足够聪明,可以释放所有分配的内存?我的猜测是,由于c++维护堆栈和堆,一旦程序退出,c++将自动释放堆栈和堆。
当进程因任何原因终止时,操作系统将清除所有已使用的内存和文件句柄。
我听说一些内存类型,比如在Windows上,COM全局堆内存不能为您释放。然而,大多数内存/句柄被清理,因为操作系统必须处理应用程序崩溃的情况。在进程本地内存和大多数句柄(如文件句柄等)的情况下,您当然可以保证它。一般情况下,你可以假设当你的应用程序退出时,操作系统会在你退出后进行清理。
还有,永远不要遵循谷歌的风格指南。它不是为c++设计的,它是为c++设计的,它减去了制作C的所有东西。它可能适用于Google(值得怀疑),但绝对不适用于其他任何人。
相关文章:
- 如何在c++中释放内存
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- std::unordered_map析构函数不释放内存?
- 在C++中释放内存期间,迭代器与指针有何不同
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 释放内存(主题模板)时出现问题
- 使用后自动释放内存
- C++ 如何释放内存
- 从函数内对象的向量中释放内存
- C++ 在不释放内存的情况下调用析构函数
- 多个线程之间的获取-释放内存顺序
- C++ - 析构函数只是释放内存还是实际删除对象
- 使用 RAII 替换最终块以释放内存
- 如何通过带有指向基类的指针的删除运算符释放内存
- 代码中的"sprintf"用法是否需要释放内存?
- C++何时使用 delete[] 并正确释放内存?
- 为什么此获取和释放内存围栏不能给出一致的值?
- 抛出新表达式的参数子表达式时释放内存
- 在这种情况下,如何释放内存?
- 在 c++ 中应按什么顺序释放内存?