免费注册 查看新帖 |

Chinaunix

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

我之异常观 [复制链接]

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
11 [报告]
发表于 2010-06-10 08:45 |只看该作者
似乎我只在写MFC程序的时候用异常,其他的项目基本没用

论坛徽章:
0
12 [报告]
发表于 2010-06-10 08:50 |只看该作者
用了这么多年c++了,很少使用异常,也很少见别人使用异常。。。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:50:28
13 [报告]
发表于 2010-06-10 09:22 |只看该作者
在进行一系列的初始化时,用异常还是不错的,代码简洁了很多。

论坛徽章:
0
14 [报告]
发表于 2010-06-10 12:48 |只看该作者
回复 1# shaver


这个东西可以提高健壮性。
喜欢用的就用,反对得就不用。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
15 [报告]
发表于 2010-06-10 13:27 |只看该作者
讲讲以前学C++的搓事,有时候真的会钻偏掉,也许对新人有帮助。

1. typedef
    看谭的书,讲typedef的种种用法,看了半天,仍旧对复杂的用法搞不懂。
    后来有人说typedef就是位置替换。恍然大悟,一句话就完全说明白。

2. exception
    exception要注意什么,怎么影响stack, 丢出的对象怎么存哪里?几个线程间会不会互相抓到exception,
    什么地方丢什么地方抓最好?一堆的想法,还是想不清楚怎么用最踏实。
    后来又有人说exception就是return, 多层的return而已。所有问题都顿悟。

论坛徽章:
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
16 [报告]
发表于 2010-06-10 18:03 |只看该作者
我还是不怎么赞同使用异常,前面有人说过了,一个程序员使用异常就必须要求整个开发团队里的人都有与之相配的经验,这是不切实际的。

当然如果你们团真的全是精英,那就随意了。不过代码规范还是需要仔细地制定。

另外C++没有强制检查这一点恐怕值得考虑。

最后就是传言异常可能造成内存泄露。可能需要写一堆的包装类对各种类型资源的生命期进行包装。这也是个麻烦。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
17 [报告]
发表于 2010-06-10 18:11 |只看该作者
我还是不怎么赞同使用异常,前面有人说过了,一个程序员使用异常就必须要求整个开发团队里的人都有与之相配的经验,这是不切实际的。
starwing83 发表于 2010-06-10 18:03


我就不明白啊……  难道C++程序员比java,C#程序员还蠢?
连个异常都不会用?


可能需要写一堆的包装类对各种类型资源的生命期进行包装。这也是个麻烦。
starwing83 发表于 2010-06-10 18:03


不必, 去看Loki::ScopeGuard, 或者boost::scope_exit。
前者比较轻量, 适合rollback逻辑已经被某个函数实现。
后者嘛…… 就很重量级了……  适合rollback逻辑没有被某个函数实现, 需要"就地"实现的情况。

论坛徽章:
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
18 [报告]
发表于 2010-06-10 18:29 |只看该作者
这不是蠢不蠢的问题,每种语言都有初学者,P阿姨这么牛但是要她突然在项目里用异常估计她也不敢。我想至少exceptional C++这本书看完了才去用异常是比较合理的(当然这本书也是比较薄的~~),如果非要在项目里用异常,先吧这本书当作内部资料给学通了再编码比较好。

论坛徽章:
0
19 [报告]
发表于 2010-06-11 23:03 |只看该作者
开始写这篇文字的时候有点顾虑,我的关于异常的观点是不是多余的,都已经是大家的常识了。
看了各位的回帖才发现,很有必要阿。

声明一点,本文的代码是用类似于C++的格式,但是关于异常的观点不限于C++。

论坛徽章:
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
20 [报告]
发表于 2010-06-12 05:50 |只看该作者
本帖最后由 starwing83 于 2010-06-12 05:53 编辑
开始写这篇文字的时候有点顾虑,我的关于异常的观点是不是多余的,都已经是大家的常识了。
看了各位的回帖 ...
shaver 发表于 2010-06-11 23:03



    关键不是用不用异常,知道不?

关键在于,如果你用了异常,那么异常实际上可能在任何时候被扔出来,你得保证你自己的代码是异常安全的。而且必须在任何持有锁的环境下catch任何异常。除非你的lock是整个作用域的,这个时候可以用对象生命周期来进行管理。(当然即使你的lock不是整个作用域,你仍然可以通过对象生命周期来管理,但是在某些极端情况下,这样仍然是不安全的)。

所以,不是说,try catch throw就是用异常了,你得考虑会不会出现一些很微妙的bug,这才是使不使用异常最大的考虑。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP