c++ - ScopeGuard 的使用真的会带来更好的代码吗?

标签 c++ raii scopeguard

我遇到了this article多年前由 Andrei Alexandrescu 和 Petru Marginean 编写,其中介绍并讨论了一个名为 ScopeGuard 的实用程序类,用于编写异常安全代码。我想知道使用这些对象进行编码是否真的会导致更好的代码,或者它是否会混淆错误处理,因为也许守卫的回调会更好地呈现在 catch block 中?有没有人有在实际生产代码中使用这些的经验?

最佳答案

它肯定会改进您的代码。您暂时提出的主张,即它是晦涩难懂的,并且代码可以从 catch block 中获得值(value),这在 C++ 中根本不正确,因为 RAII 是一个既定的习惯用法。 C++ 中的资源处理是通过资源获取来完成的,垃圾回收是通过隐式析构函数调用来完成的。

另一方面,显式的 catch block 会使代码膨胀并引入细微的错误,因为代码流变得更加复杂并且必须显式地进行资源处理。

RAII(包括 ScopeGuards)在 C++ 中并不是一项晦涩难懂的技术,而是已确立的最佳实践。

关于c++ - ScopeGuard 的使用真的会带来更好的代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48647/

相关文章:

c++ - stringstream 清除后不接受任何数据

c++ - C++中RAII和智能指针的区别

c++ - 使用析构函数做工作

c - C语言中资源获取即初始化

c++ - 最简单最整洁的c++11 ScopeGuard

c# - C# 中的作用域保护语句

c++ - 通过模板函数调用类函数

c# - C# 中 C++ 程序员的指针替代

c++ - 无法为 CListCtrl 设置叠加图像

C++:为什么这个简单的 Scope Guard 有效?