最佳答案
实际上,如果抛出意外异常,任何算法都可能失败。
例如,算法需要顺序执行两个操作,第二个操作会导致异常 - 第一个操作不会被取消(除非您处理这个问题),并且程序现在处于不一致的状态。在您链接到的不一致情况表现为内存泄漏 - 代码打算释放内存,但由于异常而未运行释放代码。
解决方案是预期异常并使用 RAII 来管理资源和状态一致性。例如,如果您需要执行两个操作,您首先在堆栈上创建一个“括号类”实例,第二个操作完成后,您在该实例上运行一个特殊方法,这意味着两个操作都已成功运行。如果抛出异常,该类的析构函数将回滚第一个操作。
关于c++ - 异常处理可能出现的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4448107/