1. 程式人生 > >C++異常物件的傳遞

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物件