关于C++异常重抛的疑问

Guo Li 2004-10-12 10:10:14
在C++的异常中,有一个异常重抛的功能,如:
try
{
xxxx;
}
catch (...)
{
throw;
}

当一个异常被抛出的时候,如果它的上层函数不能捕获该异常,那么这个异常会继续沿着调用链向上直到这个异常被捕获,那么这个异常重抛是不是就显得多余呢??
...全文
83 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
像这样一个程序:
HResource r1 = GetR1();
dosomething();
dootherthing();
CleanR1( r1 );
done();
如果 dosomething dootherthing 抛出了异常,哪 r1 就得不到释放, 因此可以写成:
HResource r1 = GetR1();
try{ dosomething(); } catch(...) { CleanR1(r1); throw;}
try{ dootherthing();} chatch(...) { CleanR1(r1); throw;}
CleanR1( r1 );
done();

不过这时我一般都是这样搞.
struct __HR1
{
HResource r1;
__HR1() : r1( GetR1() ){}
~__HR1() { CleanR1(r1); }
} r1;

dosomething();
dootherthing();
done();
pacman2000 2004-10-12
  • 打赏
  • 举报
回复
常常这么写:
catch (exception & e)
{
do_something();
throw;
}

或者:
catch (exception & e)
{
if (judge(e))
do_something();
else
throw;
}
pacman2000 2004-10-12
  • 打赏
  • 举报
回复
有用的,因为也许只是在这一层做部分处理,或者根据异常的种类来决定是不是重抛。
Guo Li 2004-10-12
  • 打赏
  • 举报
回复
C++既然有这个功能,难道只是做个花瓶?
umbrella1984 2004-10-12
  • 打赏
  • 举报
回复
这是一种设计的技巧,最后都会被扑获。
Guo Li 2004-10-12
  • 打赏
  • 举报
回复
没有人可以做一下解释吗?
Guo Li 2004-10-12
  • 打赏
  • 举报
回复
明白了!谢谢各位~

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧