原创  构造函数的 function try block ( C++ ) 收藏


#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... ) | 编辑| 举报| 收藏

旧一篇:我看MFC | 新一篇:不同语言的winSDK程序

  • 发表评论
  • 评论内容:
  •  
Copyright © akirya
Powered by CSDN Blog