首页后端开发ASP.NETC++异常处理:系统函数terminate的调用

C++异常处理:系统函数terminate的调用

时间2024-01-30 23:25:03发布访客分类ASP.NET浏览694
导读:收集整理的这篇文章主要介绍了C++异常处理:系统函数terminate的调用,觉得挺不错的,现在分享给大家,也给大家做个参考。C++中处理异常的过程是这样的:在执行程序发生异常,可以不在本函数中处理,而是抛出一个错误信息,把它传递给上一级的...
收集整理的这篇文章主要介绍了C++异常处理:系统函数terminate的调用,觉得挺不错的,现在分享给大家,也给大家做个参考。C++中处理异常的过程是这样的:在执行程序发生异常,可以不在本函数中处理,而是抛出一个错误信息,把它传递给上一级的函数来解决,上一级解决不了,再传给其上一级,由其上一级处理。如此逐级上传,直到最高一级还无法处理的话,运行系统会自动调用系统函数terminate,

学会使用terminate函数有助于异常处理

一 当一个异常产生的时候调用terminate函数,代码:

  1. [cpp] view plaincopyPRint?#include iostream>
           #include exception>
           using namespace std;
      void on_terminate(){
          cout"terninate function called!"endl;
           cin.get();
      }
      int main(void){
           set_terminate(on_terminate);
           throw exception();
           cout"terminate function not called!"endl;
           cin.get();
          return 0;
      }
        

terminate被调用的情况:

1 当发送一个异常,并且构造函数产生异常
2 当发送一个异常,或者析构函数产生异常
3 一个静态对象的构造或者析构发送一个异常
4 以atexIT注册的函数发生异常的时候
5 自定义一个异常,但是实际上没有异常产生的时候
6 调用缺省的unexcepted()函数时候
例子说话:

  1. [cpp] view plaincopyprint?#include iostream>
           #include exception>
           using namespace std;
      void on_terminate(){
          cout"terminate function called!"endl;
          cin.get();
      }
      class custom_exception{
       custom_exception(){
       }
          custom_exception(const custom_exception&
     excep){
           throw exception();
       }
      }
        ;
      void case_1(){
      try{
            throw custom_exception();
      }
       catch(...){
       }
      }
        

    当一个函数抛出了一个throw异常的时候,如果该函数内部构造了对象的话,系统会先对该对象调用析构函数,当对象调用完了析构函数以后,才开始执行异常的抛出工作。

同时在具有继承关系的类的异常中,子类的异常应该放在前面,而基类的异常应该放到最后面,这样可以使子类的异常先获得处理,父类的异常最后处理。

  1. [cpp] view plaincopyprint?#includeiostream>
            using namespace std;
       class X   {
       public:    class Trouble {
    }
        ;
       //注意:类中嵌套类的申明和定义,学习!!!      class small: public Trouble {
    }
        ;
         class Big:public Trouble {
    }
        ;
    //类中的继承!!!     void f(){
            throw big();
        }
       }
        ;
       int main()   {
             X x;
        try{
              x.f();
         }
            catch(X::Trouble &
    )     {
              cout"caught Trouble"endl;
         }
             catch(X::small&
    )     {
               cout"caught small"endl;
       }
             catch(X::big&
    )     {
             cout"caught big"endl;
         }
              return 0;
       }
        

    如果这样的话,抛出的big()类型异常则被trouble类垄断,应该倒着写才可以实现顺序捕获所有异常,另外使用...可以捕捉所有的异常,这个应该放到最后面才可以。

省略号异常处理器不允许接受任何参数,所以无法得到任何相关异常的信息,也无法知道异常的类型,这种catch语句经常用于清理资源并重新抛出所捕获的异常。

相关推荐:

异常处理实例用法

nginx+php-FPM出现502 bad gateway异常解决办法

以上就是C++异常处理:系统函数terminate的调用的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

上一篇: Paypal 支付功能的 C# .NET / JS...下一篇:C++的可移植性和跨平台开发(长文...猜你在找的ASP.NET相关文章 C# 一些面试试题的实例教程2022-05-16.NET 6开发TodoList应用之请求日志组件HttpLogging介绍2022-04-16.NET 6中间件Http Logging使用介绍2022-04-16gojs一些实用的高级用法2022-04-16.NET6开发TodoList应用之实现查询排序2022-04-16.NET6开发TodoList应用之实现数据塑形2022-04-16.NET微服务架构CI/CD自动打包镜像2022-04-16Asp.Net Core 使用Monaco Editor 实现代码编辑器功能2022-04-16.NET微服务架构CI/CD自动构建Jenkins+Gitee2022-04-16.Net Core微服务网关Ocelot集成Consul2022-04-16 其他相关热搜词更多phpjavapython程序员loadpost-format-gallery

若转载请注明出处: C++异常处理:系统函数terminate的调用
本文地址: https://pptw.com/jishu/593177.html
C++总结:面向对象的基本概念 C#调用的三维地球控件,看三维地球构建过程

游客 回复需填写必要信息