C++ 释放资源的异常处理替代方案

C++ 释放资源的异常处理替代方案,c++,exception-handling,C++,Exception Handling,我一直在学习如何编写异常安全代码。建议的大多数实践,如RAII托管内存或互斥体,即使在不使用异常的情况下也很有用,因为程序员不必担心手动管理资源 但为什么我们需要例外?当我们得不到我们想要的资源时,我们就无法继续前进,而且这个过程无论如何都会终止。然后操作系统可能会担心释放资源。那么,我错过了什么?我的论点怎么了?你认为程序在缺乏资源的情况下无法继续进行是理所当然的 如果让程序死掉是一种选择,那么您可能不需要异常。而且,即使在这种情况下,您也可能会从中受益——抛出异常可以使事情得到清理,因此(例

我一直在学习如何编写异常安全代码。建议的大多数实践,如RAII托管内存或互斥体,即使在不使用异常的情况下也很有用,因为程序员不必担心手动管理资源


但为什么我们需要例外?当我们得不到我们想要的资源时,我们就无法继续前进,而且这个过程无论如何都会终止。然后操作系统可能会担心释放资源。那么,我错过了什么?我的论点怎么了?

你认为程序在缺乏资源的情况下无法继续进行是理所当然的

如果让程序死掉是一种选择,那么您可能不需要异常。而且,即使在这种情况下,您也可能会从中受益——抛出异常可以使事情得到清理,因此(例如)您编写的文件将被刷新,这样您就不会丢失仍在缓冲区中的数据


在很多情况下,仅仅返回操作系统是不可取的。在相当多的情况下,如果可能的话,您希望使用资源,但是您仍然需要继续处理,即使它不是

异常用于您要恢复或重试的条件。您假定异常将终止程序。当然,没有必要清理任何东西。你需要担心的是它不会终止程序。换句话说,当catch()子句捕获它并使程序保持运行时。然后,您最好确保在堆栈展开时超出范围的任何对象都会被销毁,否则将导致内存泄漏。是的,RAII是正确的模式。