class DBConn //这个class用来管理DBConnction对象
{
public:
//自己设计一个新的DBConn接口 方法3
void close()
{
db.close();
closed = true;
}
~DBConn() //确保数据库连接总是会被关闭
{
//db.close();
if (!closed)
{
try
{
db.close();
}
catch()
{
//制作运转记录,记下对close的调用失
}
}
}
protected:
private:
DBconnection db;
bool closed;
};
//假如调用析构函数发送错误,导致异常。析构函数会传播该异常,这时该怎么办?
//
DBConn::~DBConn
{
try
{
db.close();
}
catch ()
{
//制作运转记录,记下对close的调用失败 方法1
// abort(); //终止某个进程 方法2
}
};
记住:
1、析构函数绝对不要吐出异常。如果一个被析构的函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吐下他们或结束程序。
2、如果客户需要对某个操作函数运行期间抛出的异常做出反应,那么class应该提供一个普通函数(不是在析构函数中)执行该操作。