我正在阅读 Google C++ 风格指南,并在其中感到困惑例外情况 http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml?showone=Exceptions#Exceptions部分。根据指南,使用它的缺点之一是:
异常安全需要 RAII
以及不同的编码实践。很多
需要配套机械
使书写正确异常安全
代码简单。此外,为了避免要求
读者了解整个通话过程
图,异常安全代码必须
隔离写入的逻辑
持久状态变为“提交”
阶段。这将有两个好处
和成本(也许你被迫
混淆代码以隔离
犯罪)。允许例外会
迫使我们总是支付这些费用
即使它们不值得
具体来说,我不明白的说法是这样的:
(...) 异常安全代码必须隔离
写入持久状态的逻辑
进入“提交”阶段。
和这个:
(...)也许你被迫
混淆代码以隔离提交 (...)。
我想我不习惯“持久状态”、“提交阶段”、“混淆代码以隔离提交”等术语。如果能提供一些关于这些术语的小解释、示例或参考资料以及可能的原因,那就太好了。
基本上,现代 C++ 使用范围限制资源管理(SBRM 或 RAII)。也就是说,对象在其析构函数中清理资源,保证调用该析构函数。
这一切都很好,除非你的代码不是现代的。例如:
int *i = new int();
do_something(i);
delete i;
If do_something
抛出异常,你就泄露了。正确的解决方案是不要像这样将资源放在野外,即:
std::auto_ptr<int> i(new int());
do_something(i.get());
现在它永远不会泄漏(并且代码更干净!)。
我认为该指南想说的是,我们已经拥有所有这些旧代码,使用现代风格会花费太多精力。所以我们不要使用异常。 (而不是修复所有代码......我非常不喜欢 Google 风格指南。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)