C++異常物件的傳遞
阿新 • • 發佈:2018-11-01
異常鏈中的物件似乎是由異常機制獨立維護,而不是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物件