7、异常处理--C++

1、抛出异常

异常处理机制有两个主要成分:异常的鉴定与发出、以及异常的处理方式。
C++通过throw表达式产生异常:

if(_index>Triangular::_max_elems){
	iterator_overflow ex(_index,Triangular::_max_elems);
	throw ex
}

2、捕获异常

利用单条或多个catch子句来捕获被抛出的异常对象。catch子句由三部分组成:关键字catch、小括号内的一个类型或对象、大括号内的一组语句(用以处理异常)

bool func(){
	bool status=true;
	//...假设我们已经抵达此处

	catch(int errno){
	log_msg(errno);
	status=false;
}	
	catch(const char *str){
	log_msg(str);
	status=false;
}
	return status;

}

异常对象的类型会被拿来逐一地和每个catch子句对比。如果类型符合,那么该catch子句的内容被执行。

如果想要捕获任何类型的异常,可以一网打尽的方式,如下:

catch(...){
	log_msg("unknown type");
}

C++规定,每个异常都应该被处理。因此,如果在main函数找不到合适的处理程序,便调用标准库函数terminate()——其默认行为是中断整个程序的执行。

当函数的try块发生某个异常,但并没有相应的catch子句将它捕获,此函数便会被中断,由异常处理机制接管,沿着“函数调用链”一路回溯,搜寻符合条件的catch子句。

3、标准异常

如果new 表达式无法从程序的空闲空间分配到足够的内存,它会抛出bad_alloc异常对象,如下:

vector<string> *
init(ifstream &infile){
	vector<string > * ptext=0;
	try{
		ptext = new vector<string>;
		//打开file 和file vector
		
	}
	catch(bad_alloc){
	cerr<<"ouch . head memory exhausted!\n";
	//清理 并退出
	

}
		return ptext;  
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值