Effective C++ Iem08 Note

//Effective C++ Item08
#include<iostream>
#include<cstring>
using namespace std;
//析构函数绝对不要吐出异常。如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们(不传播)或结束程序
//如果客户需要对某个操作函数运行期间抛出的异常做出反应,那么class应该提供一个普通函数(而非在析构函数中)执行该操作。
//例如对于std::vector<Widget> v,当vector v被销毁,它有责任销毁其内含的所有Widgets
//假如在析构第1个和第2个Widget时都抛出了异常,就有2个同时作用的异常。在两个异常同时存在的情况下,程序若不是结束执行就是导致不明确行为。
class DBConnection{
public:
	static DBConnection create();
	void close();
};
//创建DBConn用来管理DBConnection资源,为确保客户不忘记在DBConnection对象身上调用close,在析构函数中调用close
class DBConn{
public:
	DBConn(DBConnection db){
		this->db = db;
		closed = false;
	}
	void close(){
		db.close();
		closed = true;
	}
	//在析构函数中必须对异常进行处理,或者结束程序,或者吞下因调用close而发生的异常
	~DBConn(){
		if (!closed){
			try{
				db.close();
			}
			catch (std::exception){
				//...//制作运转记录,记下对close的调用失败
				//std::abort();
			}
		}
	}
private:
	DBConnection db;
	bool closed;
};
int main(){
	DBConn dbc(DBConnection::create());
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值