设为首页 加入收藏

TOP

4.9.1 标准库中的异常
2013-10-07 15:01:14 来源: 作者: 【 】 浏览:73
Tags:4.9.1 标准 异常

4.9.1  标准库中的异常

为了使用boost.exception,我们需要先了解C++(www.cppentry.com)98标准规定的异常体系。

C++(www.cppentry.com)98标准中定义了一个异常基类std::exception和try/catch/throw异常处理机制,std::exception又派生出若干子类,用以描述不同种类的异常,如bad_alloc、bad_cast、out_of_range等等,共同构建了C++(www.cppentry.com)异常处理框架。

C++(www.cppentry.com)允许任何类型作为异常抛出,但在std::exception出现后,我们应该尽量使用它,因为std::exception提供了一个很有用的成员函数what(),可以返回异常所携带的信息,这比简单地抛出一个整数错误值或者字符串更好、更安全。

如果std::exception及其子类不能满足程序对异常处理的要求,我们也可以继承它,为它添加更多的异常诊断信息。例如,想要为异常增加错误码信息可以这样:

  1. class my_exception : public std::exception          //继承标准库异常类  
  2. {  
  3. private:  
  4.     int err_no;                                         //错误码信息  
  5. public:  
  6.     my_exception(const char* msg, int err):         //构造函数  
  7.       std::exception(msg),err_no(err) {}                //初始化父类和错误码信息  
  8.     int get_err_no()                                    //获取自定义的错误码信息  
  9.     {   return err_no;}  
  10. };  

但当系统中需要很多不同种类的异常时,这种实现方法很快就成为了程序员的沉重负担--为了容纳不同的信息需要编写大量极其相似的代码。

而且,这种解法还存在一个问题:很多时候当发生异常时不能获得有关异常的完全诊断信息,而标准库的异常类一旦被抛出,它就成为了一个"死"对象,程序失去了对它的控制能力,只能使用它或者再抛出一个新的异常。

C++(www.cppentry.com)98标准的异常处理机制还不够完美,需要boost.exception来完善。

接下来的讨论在说到exception时,如果不特别指明,均是指boost::exception类,标准库的异常使用std::exception。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.8 operators 下一篇4.8.7 下标操作符

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: