1 clear up in the try{ }catch{ }
if exception happen, the system first clear up the objects which have been created in the try block,then go into the catch block;
if objects in array happen error during initialization,such as A array = new A[ 7] and some error happen in initializing the object array[3], then the handling system will auto call delete[ ] to properly release the storage.
2 no mathcing coversions
//C23Autoexcp.cpp
#include <iostream>
using namespace std;
class Except1 {};
class Except2 {
public:
Except2(Except1&) {}
};
void f() { throw Except1(); }
int main() {
try { f();
} catch (Except2) {
cout << "inside catch(Except2)" << endl;
} catch (Except1) {
cout << "inside catch(Except1)" << endl;
}
cin.get();
}
Output:
inside catch(Except1)
when f( ) throw Except1( ) , the first handler will not convert an Except1 object into an Except2 by calling constructer; so you will end up at second handler.However a base-class handler can catch a derived-class exception;