gpt4 book ai didi

c++ - 关于 C++ 中异常的缺点

转载 作者:IT老高 更新时间:2023-10-28 22:31:26 30 4
gpt4 key购买 nike

我正在阅读 Google C++ 样式指南,但对 Exceptions 感到困惑部分。根据指南,使用它的缺点之一是:

Exception safety requires both RAII and different coding practices. Lots of supporting machinery is needed to make writing correct exception-safe code easy. Further, to avoid requiring readers to understand the entire call graph, exception-safe code must isolate logic that writes to persistent state into a "commit" phase. This will have both benefits and costs (perhaps where you're forced to obfuscate code to isolate the commit). Allowing exceptions would force us to always pay those costs even when they're not worth

具体来说,我没看懂的说法是这样的:

(...) exception-safe code must isolate logic that writes to persistent state into a "commit" phase.

还有这个:

(...) perhaps where you're forced to obfuscate code to isolate the commit (...).

我想我不习惯“持久状态”、“提交阶段”、“混淆代码以隔离提交”等术语。最好能对这些术语进行一些小的解释、示例或引用,并可能说明为什么这是真的。

最佳答案

基本上,现代 C++ 使用范围绑定(bind)资源管理(SBRM,或 RAII)。也就是说,一个对象在它的析构函数中清理了一个资源,保证会被调用。

这一切都很好而且很花哨,除非您的代码不是现代的。例如:

int *i = new int();
do_something(i);
delete i;

如果 do_something 抛出异常,则说明您已经泄漏。正确的解决方案是不要像那样将资源放在野外,即:

std::auto_ptr<int> i(new int());
do_something(i.get());

现在它永远不会泄漏(代码更干净了!)。

我认为该指南想说的是,我们已经拥有所有这些旧代码,使用现代风格会花费太多精力。所以我们不要使用异常。 (而不是修复所有代码...我非常不喜欢 Google 样式指南。)

关于c++ - 关于 C++ 中异常的缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3312513/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com