标签:
举个例子:
class DBConnection { public: ... static DBConnection create(); void close(); };//这个class负责数据库连接。 //为了防止用户忘了close这个数据库连接,很容易想起来定义一个辅助类: class DBCon{ public: .. ~DBCon(){dbc.close();} private: DBConnection dbc; }
在析构函数中产生的异常通常按照两种方式来解决:
异常产生就结束:(这样可以防止不明确的行为带来的伤害)
DBConn::~DBConn() { try{
dbc.close();
}catch(...){ std:abort(); } }
或者是吞下这个异常:
DBConn::~DBConn()
{ try{ dbc.close(); }catch(...){ //制作运转记录,表明调用的失败 } }
更好一点的解决方法是给DBConn自己也定义一个close函数,再用户不自己close的情况下在使用上面的做法,这样就给了用户一个处理异常的机会了:
class DBConn{ public: ... void close() { db.close(); close = true; } ~DBConn() { if(close == false){ try{
dbc.close();
}catch(...){ std::abort(); } } } private: bool close; DBConnection dbc; };
标签:
原文地址:http://www.cnblogs.com/-wang-cheng/p/4855019.html