C++异常对象的传递

Posted 论睡不着与不想睡的区别

tags:

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

异常链中的对象似乎是由异常机制独立维护,而不是throw后面的对象,下面的程序调用了两次复制构造函数

static int c = 0;
class MyException

	int id;
public:
    MyException() : id(c++)
	
		cout << "MyException()---------------" << id << endl;
	

	MyException(MyException&) : id(c++)
	
		cout << "MyException(MyException&)---" << id << endl;
	
    
    void print_error()
    
        cout << "MyException::print_error()--" << id << endl;
    

	~MyException()
	
		cout << "~MyException()--------------" << id << endl;
	
;

void f()

	MyException e;
	throw e;


int main()

    try
    
		f();
    
    catch(MyException e)
    
        e.print_error();
    
    return 0;

运行结果


结果分析:

id为0的是f()函数中的局部MyException对象
id为1的是异常机制维护的MyException对象
id为2的是main()函数中的局部MyException对象

以上是关于C++异常对象的传递的主要内容,如果未能解决你的问题,请参考以下文章

C++异常处理的编程方法(阿愚,整整29集)

c++异步回调函数引用传递空指针异常

C++ 线程

跨 C API 边界传递异常

为啥要在 C++ 中按值传递对象 [重复]

C++ 异常机制分析