【发布时间】:2010-08-22 22:31:20
【问题描述】:
我刚刚完成了一个 C++ 程序的工作,在该程序中我实现了自己的异常(尽管派生自 std::exception)。当一个异常导致连锁反应、向上传播错误并引发其他异常时,我采用的做法是在模块(读取类)的每个适当步骤中连接错误消息。 IE。旧异常本身被删除并创建一个新异常,但错误消息更长。
这可能对我的小程序有用,但我最终对我的方法不太满意。一方面,除了最后一个例外,不保留行号(虽然目前没有应用)和文件名;确实,第一个例外中最感兴趣的信息。
我认为这可以通过将异常链接在一起来更好地处理;即旧异常在新异常的构造函数中提供。但这将如何实施?当它们超出方法的范围时,异常是否会消失,从而阻止使用异常指针?如果异常可以是任何派生类,如何复制和存储异常?
这最终让我考虑在 C++ 中链接异常是否是一个好主意。也许应该只创建一个异常,然后向其中添加其他数据(就像我一直在做的那样,但可能以更好的方式)?
您对此有何回应?是否应该将由另一个引起的异常链接在一起以保留一种“异常跟踪”——应该如何实现? -- 还是应该使用单个异常并附加额外的数据 -- 应该如何做?
【问题讨论】:
-
@kbrimington:确实,这个问题确实触及了这个问题的核心。即异常链接(或“内部异常”);我的问题只是对此进行了扩展,还询问是否应该从一开始就进行此类承诺,还是坚持只扔一次的方法。
-
忘记感谢您提供链接,但无法再编辑评论。 ^^
-
what is the proper way to do exception chaining in C++ 问题的答案是使用 C++11
std::nested_exception类,显然 C++ 标准库的作者认为,是的,链接异常可能是一件好事去做。
标签: c++ exception chaining nested-exceptions