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;
}