C++异常捕获的catch()和一般函数的区别

catch和函数的区别:

  1. catch的参数只能是值传递或引用传递

  2. catch的隐式类型转换只有两种:子类-基类;具象指针-void*泛指针。没有int-double的转换。

  3. catch匹配是按照出现先后顺序,即如果基类的catch比子类先出现,则抛出的子类异常有可能被基类catch捕获;而函数往往不看先后顺序而是寻找最合适的参数匹配。

  4. throw对象时,会调用拷贝构造函数生成临时对象【第一次拷贝】。catch值传递时,会在调用拷贝构造函数用此临时对象再生成一个对象【第二次拷贝】;引用传递时不会调用。

注意:在throw前如果用new开辟了堆空间,则异常抛出后这些空间不能自动回收。可以使用auto_ptr生成栈上的智能指针,系统自动回收销毁栈上的对象,进而调用其析构函数销毁智能指针类内部的堆空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值