栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

7、异常处理--C++

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

}
		return ptext;  
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/938649.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号