c – 在变量中存储异常的正确方法

c – 在变量中存储异常的正确方法,第1张

概述我有一个API,内部有一些错误报告的例外.基本结构是它有一个从std :: exception继承的根异常对象,然后它将抛出它的一些子类. 捕获在一个库或线程中抛出的异常并将其捕获到另一个库或线程中会导致未定义的行为(至少Qt抱怨它并且在许多情况下不允许它).我想将库调用包装在将返回状态代码的函数中,如果发生异常,则将异常对象的副本包装起来. 存储异常(具有多态行为)供以后使用的最佳方法是什么?我 我有一个API,内部有一些错误报告的例外.基本结构是它有一个从std :: exception继承的根异常对象,然后它将抛出它的一些子类.

捕获在一个库或线程中抛出的异常并将其捕获到另一个库或线程中会导致未定义的行为(至少Qt抱怨它并且在许多情况下不允许它).我想将库调用包装在将返回状态代码的函数中,如果发生异常,则将异常对象的副本包装起来.

存储异常(具有多态行为)供以后使用的最佳方法是什么?我相信c 0x future API会使用类似的东西.那么最好的方法是什么?

我能想到的最好的方法是在每个异常类中都有一个clone()方法,它将返回一个指向同一类型异常的指针.但这不是很通用,根本不涉及标准异常.

有什么想法吗?

编辑:似乎c 0x将有a mechanism for this.它被描述为“库魔术”.这是否意味着不需要c 0x的任何语言功能?如果没有,是否有任何与c 03兼容的实现?

编辑:看起来像有一个@L_301_1@.我将保持问题开放任何非boost :: copy_exception答案.

编辑:解决j_random_Hacker关于异常的根本原因的问题是内存不足错误.对于这个特定的库和一组例外,情况并非如此.从根异常对象派生的所有异常表示由无效用户输入引起的不同类型的解析错误.与内存相关的异常只会导致抛出std :: bad_alloc,它将单独解决.

解决方法 你有什么我认为是你最好的,唯一的答案.您不能保留对原始异常的引用,因为它将留下范围.你只需要复制它,唯一的通用方法是使用像clone()这样的原型函数.

抱歉.

总结

以上是内存溢出为你收集整理的c – 在变量中存储异常的正确方法全部内容,希望文章能够帮你解决c – 在变量中存储异常的正确方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1241016.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存