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