class DBConnection { public: ... static DBConnection create(); //此函數返回DBConnection對象 void close(); //關閉聯機;失敗則拋出異常 };
一個較佳策略是創建一個用來管理DBConnection資源的DBConn類,DBConn類自己提供一個close函數,因而賦予客戶一個機會得益處理“因該操作而發生的異常”。DBConn也可以追蹤其所管理的DBConnection是否已被關閉,若沒有被關閉,則由DBConn的析構函數關閉它。這可防止遺失數據連接。然而如果DBConnection析構函數調用close失敗,則可使用“強制結束程序”或“吞下異常”的方法:
class DBConn { public: DBConn(); ~DBConn(); void close(); private: DBConnection db; bool closed; }; DBConn::DBConn() { } DBConn::~DBConn() { if(!closed) { try { db.close(); //關閉連接 } catch(...) //如果關閉動作失敗 { 寫日志,記下對close的調用失敗; //記錄下來並結束程序 ... //或者吞下異常; } } } void DBConn::close() //供客戶使用的新函數 { db.close(); closed = true; }