我刚刚完成了一个C++程序,其中我实现了自己的异常(虽然是从std::exception派生的)。当一个异常引起连锁反应,向上传播错误并引发其他异常时,我采用的做法是在每个模块(即类)中的每个适当步骤上串联错误消息。也就是说,旧的异常本身被丢弃,创建一个新的异常,但是具有更长的错误消息。
这种方法在我的小程序中可能有效,但最终我对我的方法并不满意。首先,行号(虽然目前没有应用)和文件名除了最后一个异常外都未被保留;而实际上,这些信息在第一个异常中最为重要。
我认为可以通过将异常链接在一起来更好地处理这个问题;即在新异常的构造函数中提供旧异常。但是这该如何实现呢?难道异常在从方法中超出作用域时不会消失,从而阻止使用异常指针吗?如果异常可以是任何派生类,那么如何复制和存储异常?
这最终让我考虑到,在C++中连接异常是否是一个好主意。也许应该只创建一个异常,然后向其中添加附加数据(像我一直在做的那样,但可能更好)?
你对此有何回应?导致其他异常的异常是否应该被链接在一起以保留一种“异常跟踪”--应该如何实现?--或者是否应该使用单个异常并附加额外的数据--应该如何做到这一点?