【问题标题】:What are your best practices for C++ exception handling? [closed]C++ 异常处理的最佳实践是什么? [关闭]
【发布时间】:2013-01-13 09:56:25
【问题描述】:

我在网上搜索了很多关于这个主题的文章。但是,我发现没有完整的清单来验证我们的代码的异常安全质量。

所以,我想向您收集宝贵的 C++ 异常处理最佳实践。

我先列出一些我自己的做法:

  1. 在析构函数中捕获所有异常:

    struct A
    {
        ~A()
        {
            try
            {
                // Here may throw exceptions
            }
            catch (std::runtime_error& e)
            {}
            catch (...)
            {
                logging("...");
            }
        }
    };
    
  2. 在异常信息中添加函数名、源文件名和行号。 __func____FILE____LINE__ 是好朋友。

  3. 永远不要使用异常规范。原因在《C++编码标准》一书中给出。

你的是什么?

【问题讨论】:

  • 其实__func__是个好朋友。我们都回避__FUNCTION__,因为它不在标准中。
  • 通过 const 引用按值捕获。
  • @AlokSave,为什么是 const?非常量引用捕获更好!
  • @hate-engine:是什么让你得出这个结论?
  • Non-const 意味着可能的复制意味着可能的 std::bad_alloc 意味着 std::terminate.. const ftw

标签: c++ exception logging exception-handling coding-style


【解决方案1】:

我知道这可能更适合作为评论而不是作为答案,但由于我链接的资源回答了您的所有问题和更多,我认为它也可以将其发布为答案,只是为了使其更具可见性和/或相关性。

由于我不可能比原版更好地总结它,我什至不会尝试做一个简短的总结,因为我会冒着扭曲它或给出有偏见的概述的风险。

看看这个two-part talk on exception-safe coding by Jon Kalb。就是这样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-07
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    • 2013-05-09
    • 2011-11-10
    相关资源
    最近更新 更多