acmilan作者
10年1个月前修改于 10年1个月前IP:四川
827402
4楼
引用 金星凌日:
但你的例子中noexcept也只是为了避免资源泄漏。
标准库的异常并不存在“库作者的疏忽导致即使捕获异常也会资源泄漏”的情况。但除了这种情况外,我想不出还有什么情况下不能捕获并处理所有异常。
资源泄露并不是绝对的,大部分时候是相对的,通常是在循环里发生的。比如在一个循环里边频繁catch (...){}为了并被当做了正确用法,然而在里边CreateFile与CloseHandle之间的代码被range_error之类的防不胜防的讨厌的标准库异常打断。。。
noexcept的本质是断言一种确定性的顺序逻辑,断言该程序段一定执行完毕,不会由于异常而中途跳出。规避资源泄露只是它的一个应用而已。
除此之外,noexcept可以断言某段程序是异常原子的,声明为noexcept的函数可以在try catch块里边安全使用,不用担心会catch到函数中间某个地方。
评论
文号 / 827402

千古风流
名片发私信
学术分 4
总主题 466 帖总回复 2942 楼拥有证书:进士 学者 笔友
注册于 2009/05/30 21:22:42最后登录 2019/01/31 17:16:38
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:0

个人简介

暂未填写
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的