异常处理深度解析

Posted 学习只为旅行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异常处理深度解析相关的知识,希望对你有一定的参考价值。





#include <iostream>
#include <cstdlib>
#include <exception>

using namespace std;

void my_terminate()
{
    cout << "void my_terminate()" << endl;
    exit(1);//结束当前函数
}

class Test 
{
public:
    Test() 
    {
        cout << "Test()"; 
        cout << endl;
    }
	
    ~Test() 
    {
        cout << "~Test()"; 
        cout << endl;
    }
};


int main()
{
    set_terminate(my_terminate);//设置异常处理函数
    
    static Test t;
    
    throw 1;
	
    return 0;
}

打印:
Test()
void my_terminate()
~Test()

#include <iostream>
#include <cstdlib>
#include <exception>

using namespace std;

void my_terminate()
{
    cout << "void my_terminate()" << endl;
    exit(1);
    //abort();//C++编译器默认是调用这个函数,直接强制结束程序,防止析构函数还会抛异常
    //my_terminate()被调用两次,资源被释放两次,很危险
}

class Test 
{
public:
    Test() 
    {
        cout << "Test()"; 
        cout << endl;
    }
	
    ~Test() 
    {
        cout << "~Test()"; 
        cout << endl;
        
        throw 2;
    }
};

int main()
{
    set_terminate(my_terminate);
    
    static Test t;
    
    throw 1;
	
    return 0;
}


应该将exit注释掉,使用abort函数

小结

以上是关于异常处理深度解析的主要内容,如果未能解决你的问题,请参考以下文章

深度解析Java线程池的异常处理机制 #3

Java笔记八,深度解析Java线程池的异常处理机制

异常处理深度解析

外传篇1 异常处理深度解析

异常处理深度解析

异常和TCP通讯