zoukankan      html  css  js  c++  java
  • Effective C++ 笔记 —— Item 8: Prevent exceptions from leaving destructors.

    Destructors should never emit exceptions. If functions called in a destructor may throw, the destructor should catch any exceptions, then swallow them or terminate the program.

    1. Terminate the program if close throws, typically by calling abort:

    DBConn::~DBConn()
    {
        try 
        {
            db.close(); 
        }
        catch (...) {
            // make log entry that the call to close failed;
            std::abort();
        }
    }

    2. Swallow the exception arising from the call to close:

    DBConn::~DBConn()
    {
        try 
        { 
            db.close(); 
        }
        catch (...) {
            //make log entry that the call to close failed;
        }
    }

    If class clients need to be able to react to exceptions thrown during an operation, the class should provide a regular (i.e., non-destructor) function that performs the operation.

    class DBConn {
    public:
        // ...
        void close() // new function for
        { 
            // client use
            db.close();
            closed = true;
        }
        ~DBConn()
        {
            if (!closed) 
            {
                try 
                { 
                    // close the connection
                    db.close(); // if the client didn’t
                }
                catch (...) { // if closing fails,
                    //make log entry that call to close failed; 
                    //note that and ... terminate or swallow
                }
            }
        }
    private:
        DBConnection db;
        bool closed;
    };
  • 相关阅读:
    我的软件工程课目标
    软件工程课程的建议
    结对编程学习fault、error、failure三种状态
    结对编程项目的过程记录与收获
    “结对编程”之我见
    关于问卷调查
    我的软件工程课目标
    软件工程课程建议
    结对编程2
    结对编程之四则运算
  • 原文地址:https://www.cnblogs.com/zoneofmine/p/15200159.html
Copyright © 2011-2022 走看看