189 8069 5689

C++不能抛出异常怎么解决

这篇文章主要介绍“C++不能抛出异常怎么解决”,在日常操作中,相信很多人在C++不能抛出异常怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++不能抛出异常怎么解决”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

成都创新互联是一家专注于成都网站建设、成都网站制作与策划设计,台儿网站建设哪家好?成都创新互联做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:台儿等地区。台儿做网站价格咨询:13518219792

E.25:如果不能抛出异常,模仿RAII方式进行资源管理

Reason(原因)

即使不和异常一起使用,RAII通常是最好的,最系统化的处理资源的方式。

Note(注意)

使用异常的错误处理是C++中完全、系统化处理非局部错误的唯一方式。通常,非侵入式发出错误信号以便构造一个对象需要使用异常。以无法忽视的方式发出错误信号需要异常。如果你无法使用异常,尽你所能模拟它。

很多关于异常的大量恐惧都是被误导的。当在没有被指针或复杂的控制结构搞乱的代码环境中使用异常时,异常处理几乎总是可以接受的(无论是时间还是空间维度),几乎总是可以带来更好的代码。当然,想象一个异常处理机制的良好实现,它不存在于任何系统。还是存在不属于上述问题,但由于其他原因而不能使用异常的情况。某些硬实时系统就是例子之一:一个操作必须在固定时间内完成并得到正确或错误的结果。如果没有适当的时间评价工具,异常很难满足这个要求。这样的系统(例如飞行控制系统)通常也会禁止使用动态(堆)内存。

因此,关于错误处理,主要的准则是“使用异常和RAII”。这个部分内容处理以下情况:要么你无法获得异常的高效实现,要么你的代码是老鼠窝一样的旧代码(例如,大量的指针,病态定义的所有权,大量的基于测试错误的非系统化错误处理),这时无法引入简单和系统化的异常处理。在谴责异常或抱怨异常的成本过高之前,考虑使用错误代码时的成本和复杂度。如果你担心性能,进行测量(而不是无根据的怀疑,译者注)。

Example(示例)

假设你想编写如下代码:

void func(zstring arg)
{
   Gadget g {arg};
   // ...
}

如果gadget无法正确构建,func会因为异常退出。如果你无法抛出异常,我们可以通过给Gadget增加一个valid成员函数来模拟RAII风格的资源管理。

error_indicator func(zstring arg)
{
   Gadget g {arg};
   if (!g.valid()) return gadget_construction_error;
   // ...
   return 0;   // zero indicates "good"
}

这里的问题当然是调用者必须记得检查返回值。

Enforcement(实施建议)

可能(仅仅)适用这个想法的特定版本:例如,在资源句柄构建之后系统化检查valid()。

到此,关于“C++不能抛出异常怎么解决”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


网站栏目:C++不能抛出异常怎么解决
网站网址:http://cdxtjz.com/article/ghdoch.html

其他资讯