反对例外

nak*_*iya 8 c++ error-handling exception

我的一位朋友向我提出了这个问题.我被困住了因为我不善于使用异常.请记住,我们都在使用C++的工作环境中工作,但在C传统中进行错误处理.他的问题是这样的:

函数A调用B依次调用C.抛出异常C并且该异常的catch块在A.B调用之前获得的资源会发生什么C?我们如何清理它们?我的回答是使用RAII.但即使我说出来,我也知道它不会起作用.我们有很多以C模式编写的代码库.在代码中我没有看到自动指针等.资源不一定包含在类中.即使它们是,在大多数情况下,析构函数仍留给编译器.简而言之,一切都是手动完成的.

真正的问题是如何通过巨大的代码库来实现从C错误处理到异常的转换?我的朋友提出的问题只是当你在C语言错误处理方面站稳脚跟并想知道如何从那里迁移到异常时可能出现的问题之一.

Cas*_*Cow 5

Andrei Alexandrescu和Joshua Lehrer开发了一种名为Scope Guard的技术,它提供了一种技术,可以在分配对象时立即提供"范围 - 退出"代码,并在此时打开它的范围.

D编程语言实际上是标准的.

boost库有一个名为Scope Exit的增强功能.如果您的代码不是异常安全的,因为函数B看起来不是,如果抛出任何东西,它将无法正常处理.

在异常之后展开调用堆栈时,析构函数将运行.这就是为什么你必须确保他们自己不会抛出任何例外.