#include<iostream>
using namespace std;
class Mem
{
public:
Mem() {
puts( "Mem::Mem" );
}
Mem( int n ) {
puts( "Mem::Mem(int n)" );
throw std::exception( "一个异常" );
}
~Mem() {
puts( "Mem::~Mem" );
}
};
class test
{
Mem *mObj1;
Mem mObj2;
public :
test( int n )try://function try block如果构造函数初始化列表中的异常也能够捕获,
//不过会在catch中自动重新抛出异常,原因就是初始化列表中有错误的话,就代表某个成员未构造成功,
//那么对象也一定不能构造成功.如果不重新抛出则就能使用未构造成功的对象,显然是不合理的。
mObj1( new Mem( n ) ) {
puts( "test::test" );
} catch ( const std::exception& e ) {
puts( "catch(const std::exception&) in test" );
printf( "std::exception = %s\n" , e.what() );
} catch ( ... ) {
puts( "catch(...)" );
}
~test() {
delete mObj1;
puts( "test::~test" );
}
};
int main()try
{
test obj( 9 );
return 0;
} catch ( const std::exception& e )
{
puts( "catch(const std::exception&) in main" );
printf( "std::exception = %s\n" , e.what() );
} catch ( ... )
{
puts( "catch(...)" );
}
发表于 @ 2009年06月11日 14:12:00 | 评论( loading... ) | 举报| 收藏