免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: shaver
打印 上一主题 下一主题

我之异常观 [复制链接]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
21 [报告]
发表于 2010-06-12 08:04 |只看该作者
回复 20# starwing83

指针, 多线程, 信号处理 —— 那一样没有"微妙的bug"?
因噎废食。

同时手工地重复地在一层又一层检测并向上返回 —— 就是安全的? 就是可信任的? 就不会引起"微妙的bug"?

找一个好的编译器, 异常机制就值得信赖
不值得信赖的是程序员自己

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
22 [报告]
发表于 2010-06-12 09:14 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
23 [报告]
发表于 2010-06-12 09:30 |只看该作者
哦,你能用好么?

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
24 [报告]
发表于 2010-06-12 10:54 |只看该作者
能用错误处理就错误处理,然后再是异常,混着用也没有什么。就是将简单的代码做足功夫才好。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
25 [报告]
发表于 2010-06-15 02:12 |只看该作者
我觉得我用不好异常,完全没有实践过。指针是个开胃小菜,但是如果你决定用异常了,你的所有的设计思路和决策都得变,这就是代价

论坛徽章:
0
26 [报告]
发表于 2010-06-18 16:54 |只看该作者
关键在于,如果你用了异常,那么异常实际上可能在任何时候被扔出来,你得保证你自己的代码是异常安全的。而且必须在任何持有锁的环境下catch任何异常。除非你的lock是整个作用域的,这个时候可以用对象生命周期来进行管理。(当然即使你的lock不是整个作用域,你仍然可以通过对象生命周期来管理,但是在某些极端情况下,这样仍然是不安全的)。

所以,不是说,try catch throw就是用异常了,你得考虑会不会出现一些很微妙的bug,这才是使不使用异常最大的考虑。
starwing83 发表于 2010-06-12 05:50


1、对象生存周期的问题,可以通过提取一个恰巧包括锁的作用域的函数来解决:
    void fun(){
        do_fun1();
        do_new_fun();
        do_fun4();
    }
    void do_new_fun(){
        Lock l;
        do_fun2();
        do_fun3();
    }

2、我不认为把资源的分配和释放包装起来是很难做到的事情。反过来,使用不包装的分配/释放函数,即使不使用异常,程序员也会犯低级错误,导致分配/释放的错误,而包装成类就不会产生这种“微妙的bug"

论坛徽章:
0
27 [报告]
发表于 2010-06-18 17:46 |只看该作者
无论你想出来再巧妙的方法,怎样强制项目组里的所有人只用你的封装,不自己写代码,才是个问题。

论坛徽章:
0
28 [报告]
发表于 2010-06-18 18:14 |只看该作者
看实际吧  自己用过觉得好就用 不好就不用咯。 不过我还没用过,现在新公司的代码很多都有。我现在也要尝试用

论坛徽章:
0
29 [报告]
发表于 2010-06-18 22:42 |只看该作者
前面说过,本文探讨的对象不仅限于C++,所以我对几种语言中使用作用域方式自动释放资源做了一下比较:

C++:C++可以使用上面举例的在栈上分配对象的方式,函数返回,栈对象自动销毁,资源释放。
java/python : java/python采取的引用计数的方式,离开作用域引用解除、对象自动销毁,资源释放。.net好像也是这种方式。
delphi,也许还有vb(不是vb.net):这一类的就比较惨了,既缺少C++的在栈上分配对象的能力,又缺少java/python的对象自动回收能力,这一类语言怎么实现资源的自动释放,还有待考查。

论坛徽章:
0
30 [报告]
发表于 2011-11-10 16:22 |只看该作者
理想是美好的,项目里有30个成员,每天代码提交以后要全编译通过都觉得有不少困难。让大家都使用异常,这个风险确实太大了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP