异常处理

异常

abort()函数会发出SIGABRT信号导致进程异常终止。

C++的异常要注意的是throw语句实际上是跳转语句,它会抛出一个对象或者说实例然后跳到catch语句块那里然后找对应的类型进行匹配,一旦匹配上就执行catch块里的内容。通常我们可以构造一个类用作异常类型,这样可以使用不同的异常类型来区分不同函数在不同情况下引发的异常。

C++异常处理采用栈解退机制。

引发异常时编译器总是创建一个临时拷贝,即使异常规范和catch块中指定的是引用。这里使用引用的原因是基类引用可以执行派生类对象。


exception类

在标准库<stdexcept>中异常类及其派生类的结构

对于使用new导致的内存分配问题,C++的最新处理方式是让new引发bad_alloc异常。该异常类的声明在<new>中,它也是从exception类派生而来。

 

示例程序

#include <iostream>
#include <string>
#include <exception>
using namespace std;

class bad_man : public exception
{
public:
	const char* what() const  
	{
		return "bad man!!!";
	}
};

int divide(int a, int b) {
	if (b == 0) {
		throw bad_man();
	}
	return a / b;
}

int main() {
	try {
		divide(1, 0);
	}
	catch (const exception& bad) {
		cout << bad.what() << endl;
	}
 	return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值