程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 條款08:別讓異常逃離析構函數

條款08:別讓異常逃離析構函數

編輯:C++入門知識

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

  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved