我遇到了this article多年前由 Andrei Alexandrescu 和 Petru Marginean 编写,其中介绍并讨论了一个名为 ScopeGuard 的实用程序类,用于编写异常安全代码。我想知道使用这些对象进行编码是否真的会导致更好的代码,或者它是否会混淆错误处理,因为也许守卫的回调会更好地呈现在 catch block 中?有没有人有在实际生产代码中使用这些的经验?
最佳答案
它肯定会改进您的代码。您暂时提出的主张,即它是晦涩难懂的,并且代码可以从 catch
block 中获得值(value),这在 C++ 中根本不正确,因为 RAII 是一个既定的习惯用法。 C++ 中的资源处理是通过资源获取来完成的,垃圾回收是通过隐式析构函数调用来完成的。
另一方面,显式的 catch
block 会使代码膨胀并引入细微的错误,因为代码流变得更加复杂并且必须显式地进行资源处理。
RAII(包括 ScopeGuard
s)在 C++ 中并不是一项晦涩难懂的技术,而是已确立的最佳实践。
关于c++ - ScopeGuard 的使用真的会带来更好的代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48647/