您对C++异常处理的最佳做法是什么?

xml*_*lmx 13 c++ logging coding-style exception-handling exception

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

所以,我想从你那里收集有价值的C++异常处理最佳实践.

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

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

    struct A
    {
        ~A()
        {
            try
            {
                // Here may throw exceptions
            }
            catch (std::runtime_error& e)
            {}
            catch (...)
            {
                logging("...");
            }
        }
    };
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在异常信息中添加函数名,源文件名和行数.__func__,__FILE__并且__LINE__是好朋友.

  3. 切勿使用例外规格.原因在"C++编码标准"一书中给出.

你的是什么?

And*_*owl 15

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

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

请关注Jon Kalb关于异常安全编码的这个由两部分组成的演讲.而已.