首页 > 代码库 > Effective C++ 条款八 别让异常逃离析构函数
Effective C++ 条款八 别让异常逃离析构函数
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应该提供一个普通函数(不是在析构函数中)执行该操作。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。