C++异常机制

异常:当一个函数发现有自己无法处理的情况就会将文提交给它的调用者处理。

void f1(int i)
{
	if (i == 3)//当i==3 时,将异常抛出给f();
	{
		throw "****";//抛出这个对象。
	}
}
void f()  
{
	try{ f1(); }//尝试执行
	catch (int i)//捕获列表,捕获的都是临时对象
	{
		cout << 1;
	}
	catch (char c)
	{
		cout << c;
	}
	catch (const char* str)
	{
		cout<< str;
		throw "asd";//异常再抛出
	}
}

int main()
{
	try
	{
		f();
	}
	catch (...)//可以捕获任意异常,但不清楚类型
	{
	 cout <<”main“; 
	}
}

捕获匹配原则

先检查throw 是否在try 中,若在则在对应的catch列表中找,若有匹配则进入次catch中处理,若没在try中或没匹配到对应的catch则继续在函数调用栈中寻找。一直找到main函数里,若还没有匹配到,则程序终止。

 基类可以捕获派生类
   catch...{} //万能捕获

异常的再抛出

在匹配到某个catch后,此catch块并不能完全解决这个异常,进行一些矫正后继续抛出。

异常的安全

析构函数中使用异常可能会内存泄漏
构造函数中使用异常可能会使初始化对象不完整。
并发环境的异常会造成死锁。

解决方法:捕获后,先释放,再抛出。
RAII

总结

优点:良好的使用可以高效的定位bug。
缺点:程序跳转,难以调试,内存泄漏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值