当前位置:  开发笔记 > 编程语言 > 正文

ScopeGuard的使用是否真的能带来更好的代码?

如何解决《ScopeGuard的使用是否真的能带来更好的代码?》经验,为你挑选了2个好方法。

多年前我偶然发现了Andrei Alexandrescu和Petru Marginean撰写的这篇文章,该文章介绍并讨论了一个名为ScopeGuard的实用程序类,用于编写异常安全的代码.我想知道使用这些对象进行编码是否真的能够产生更好的代码,或者是否会混淆错误处理,或许可以在catch块中更好地呈现guard的回调?有没有人在实际生产代码中使用这些经验?



1> Konrad Rudol..:

它肯定会改善您的代码.你的初步声明,它是模糊的,并且代码在catch块中的优点在C++中是不正确的,因为RAII是一个既定的习惯用法.C++中的资源处理通过资源获取完成的,垃圾收集是通过隐式析构函数调用完成的.

另一方面,显式catch块会使代码膨胀并引入细微的错误,因为代码流变得更加复杂,并且必须明确地完成资源处理.

RAII(包括ScopeGuards)在C++中并不是一种模糊的技术,而是坚定地建立了最佳实践.


+1坚持现代c ++技术.还应该注意到,Alexandrescu在这里提出了一个新版本的ScopeGuard:http://channel9.msdn.com/Shows/Going+Deep/C-and-Beyond-2012-Andrei-Alexandrescu-Systematic-Error-Handling-in -C更容易使用.Micht值得编辑.

2> j_random_hac..:

是.

如果有一个C++代码,我建议每个C++程序员花10分钟学习,那就是ScopeGuard(现在是免费提供的Loki库的一部分).

我决定尝试使用(稍微修改过的)ScopeGuard版本来处理我正在研究的小型Win32 GUI程序.您可能知道Win32有许多不同类型的资源需要以不同方式关闭(例如,内核句柄通常是关闭的CloseHandle(),GDI BeginPaint()需要与之配对EndPaint()等)我使用ScopeGuard来获取所有这些资源,并且还用于分配工作缓冲区new(例如,用于与Unicode之间的字符集转换).

令我感到惊讶的是这个项目有多. 基本上,这是双赢的:您的代码同时变得更短,更健壮.未来的代码更改不会泄漏任何东西.他们只是不能.多么酷啊?

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有