c++ - C++ 异常处理的最佳实践是什么?

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

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

所以,我想从您那里收集有值(value)的 C++ 异常处理最佳实践。

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

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

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

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

你的是什么?

最佳答案

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

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

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

关于c++ - C++ 异常处理的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14589525/

相关文章:

c++ - Go 的多值返回语句是异常的替代方案吗?

java - junit中如何处理异常

python - 如何在 Logging 模块的 Formatter 中使用 Python Bottle 模板

c++ - 使用 MinGW/MSYS 遍历 Win32 API 堆栈?

c++ - "Function template has already been defined"与互斥的 `enable_if` s

java - 如何区分 Spring Data Jpa 中的 DataAccessException 中的数据库连接失败错误与其他异常

javascript - 如何将不同类型的 webview javascript 消息记录到 java ide 控制台

Python 日志处理程序

C++ 错误 : type name is not allowed array

c++ - 调用父构造函数时如何避免模板参数上的样板