2014-04-04 105 views
0

我一直在学习如何编写异常安全代码。大多数类似RAII管理内存或互斥体的做法即使在我们不使用异常时也很有用,因为程序员不必担心手动管理资源。替代异常处理释放资源

但为什么我们需要例外?当我们没有得到我们想要的资源时,我们无法继续前进,而且这个过程将会终止。那么操作系统可能会担心释放资源。那么,我错过了什么?我的论点有什么问题?

+0

在您想要恢复或重试的情况下使用异常。 – songyuanyao

+0

你认为一个异常会终止程序。当然,清理任何东西都没有意义。你必须担心的是它*不会终止程序。换句话说,当catch()子句捕获它并使程序运行时。那么你最好确保在解开堆栈时超出范围的任何对象被破坏,否则将会发生内存泄漏。是的,RAII是正确的模式。 –

回答

2

你认为理所当然的是,当它缺乏资源时,程序不能继续进行下去。

如果让程序简单死去是一个选项,那么你可能不需要例外。再次,即使在这种情况下,您也可能从中获益 - 抛出异常可以清理所有事情,例如,您写入的文件将被刷新,因此不会丢失仍在缓冲区中的数据。

对于更多的情况,只是返回到操作系统不是一个选项。在很多情况下,如果可能的话,您希望使用资源,但即使不是,仍需要继续处理。