读书人

C++ 中的错误处理要点

发布时间: 2013-03-27 11:22:42 作者: rapoo

C++ 中的异常处理要点
catch 异常时,C++不会通过相关“转换构造函数”来强行匹配,但可用父类匹配子类在catch中尽量使用引用,以免出现“切割”及不必要的拷贝catch(...) 可以捕获一切,{throw;}可以将异常再次抛出没有catch可用时,或异常由析构函数抛出时,系统调用terminate(), 进而调用abort()终止程序。可通过set_terminate()替换terminate函数要确保构造函数不会抛出异常,否则析构函数不会调用,资源也就得不到释放了解auto_prt, smart_ptr的使用“异常规格说明”可使函数调用者更直观地知道应当处理的异常。void f() throw (Exception1, Exception2){}也可确保无异常:void f() throw(){};模板类并不使用此说明,因为实例类的行为尚未可知当函数抛出了不在列表中的异常时,默认调用unexpected() 函数,可使用set_unexpected设置行为继承来的方法不要在“异常规格说明”中新增新的异常类型(但可以使用已有异常的子类,总之保证兼容针对父类异常规格写的异常处理代码),要确保“is-a”原则的落实。异常会增加开销,请只在异常情况下使用尽量使用系统提供的异常类,或继承之subclasses of logic_errordomain_error, invalid_argument, length_error, out_of_range, bad_cast, bad_typeidsubclasses of runtime_errorrange_error, overflow_error, bad_alloc

读书人网 >C++

热点推荐