异常处理的基本问题

soarhigh 2001-07-20 11:02:06
In the following example, the try block attempts to write the headers. The catch block then handles a specific file exception, and passes all other exceptions on to the outer block with the throw macro:

// Example of the try and catch statements
try
{
// Write the file header
file.Write((LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER));
//
// Write the DIB header and the bits
file.WriteHuge(lpBI, dwDIBSize);
}
catch (CFileException* e)
{
::GlobalUnlock((HGLOBAL) hDib);
throw;
}

::GlobalUnlock((HGLOBAL) hDib);
return TRUE;
请问,若try块中若无异常出现,则直接执行::GlobalUnlock((HGLOBAL) hDib);
return TRUE;
是吗?
又try 块中无throw ,怎么把异常抛掷到catch块?
catch块中的throw 若起作用,是否就不执行::GlobalUnlock((HGLOBAL) hDib);
return TRUE;
这两条语句。
...全文
147 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lz_0618 2001-07-21
  • 打赏
  • 举报
回复
正确:是否是若在try块中只要有异常,不管其中有没有throw语句,catch块都会执行异常处理
Try块中一般没有throw语句
soarhigh 2001-07-20
  • 打赏
  • 举报
回复
是否是若在try块中只要有异常,不管其中有没有throw语句,catch块都会执行异常处理?
soarhigh 2001-07-20
  • 打赏
  • 举报
回复
在本问题的try块中并未有throw 语句出现,那跟在其后的catch是否还执行呢?
zzh 2001-07-20
  • 打赏
  • 举报
回复
其实也可以不必要把异常扔出去的,你可以通过在CATCH 块中作例外处理来完成这些功能啊
lz_0618 2001-07-20
  • 打赏
  • 举报
回复
1,正确
2,又try 块中无throw,又无异常,永远也不会执行catch中的内容(用goto 语句也许可以,但我怎么也找不到理由这么用啊!)
3,catch块中的throw的作用,是告诉程序,该错误还没有处理完,将他转到上一级的catch块中,::GlobalUnlock((HGLOBAL) hDib); return TRUE;当然不再执行,若catch块中没有throw则::GlobalUnlock((HGLOBAL) hDib); return TRUE;肯定会执行的。
你可以编个简单的程序试一下:
void testFun()
{
try
{
throw new CException();
}
catch(...)
{
throw;
}
::AfxMessageBox("testFun--2");
}

void CTestDlg::OnButton2()
{
try
{
testFun();
}
catch (...)
{
::AfxMessageBox("Test 1");
}
}


格利高里 2001-07-20
  • 打赏
  • 举报
回复
try块中没有异常,就不执行catch块中的代码的。有异常的话,就执行匹配catch块、以及后面的代码,但你的catch块中用了throw,则会转到上一级的catch块中执行。
knight_z 2001-07-20
  • 打赏
  • 举报
回复
第一个问题,对你的回答是 Y。
第二个问题很模糊,一般来说当无异常的时候为了执行异常处理的代码会在try块的最后用
throw。既然没有异常发生何谈“异常抛到catch块?”呢。
异常处理中再抛出异常我没有试过。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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