我个人的理解是:?
1。在private或者protected的成员函数不使用try,catch,而只使用throw?
2。如果在private或者protected的成员函数需要使用try,catch,那么就要使用rethrow?
3。在public成员函数里使用try,catch?
4。如果该类相对于整个项目来说是属于被调用层,那么public成员函数也可以不使用try,catch?
5。如果调用第三方的代码,我一般都会用try,catch?
class CTest1;?
class CTest2;?
class CTest3;?
void BadCode()?
{?
? //define?
? CTest1 * pTest1 = NULL;?
? CTest2 * pTest2 = NULL;?
? CTest3 * pTest3 = NULL;?
? //使用try, catch, throw?
? try?
? {?
? ? //new test1?
? ? pTest1 = new CTest1;?
? ? //do something?
? ? bool bRet = DoSomething();?
? ? if (!bRet)?
? ? ? throw -1;?
? ? //new CTest2?
? ? pTest2 = new CTest2;?
? ? //do something?
? ? bRet = DoSomething();?
? ? if (!bRet)?
? ? ? throw -2;?
? ? //new CTest3?
? ? pTest3 = new CTest3;?
? ? bRet = DoSomething();?
? ? //do something?
? ? if (!bRet)?
? ? ? throw -3;?
? ? //release?
? ? delete pTest1;?
? ? pTest1 = NULL;?
? ? delete pTest2;?
? ? pTest2 = NULL;?
? ? delete pTest3;?
? ? pTest3 = NULL;?
? }?
? catch(...)?
? {?
? ? if (pTest1)?
? ? ? delete pTest1;?
? ? if (pTest2)?
? ? ? delete pTest2;?
? ? if (pTest3)?
? ? ? delete pTest3;?
? }?
}
//-----------------------------------------------------------------------
{
..........
.........
//throw
}
catch (int x)
{
.......
}
比如if(..)的 这样的话 要这些try catch干什么?多此一举? 直接if语句后面写就的啦!
(2)如果try中没有throw, 哪么catch 会捕获到异常吗?怎么捕获的?这一点很不明白! 如果try中发生异常 哪么到底谁通知catch呢?
(3) throw到底能干什么?
2.try块里的代码可能没有显示抛出异常,但里面调用的函数有可能抛出异常;怎么捕获的就涉及到异常处理系统的实现,具体的还是由牛人们来解答吧
3.throw就是抛出指定的异常,该异常可以在程序的其他地方被捕获并处理,当然也可能始终没有被捕获,此时,程序一般立刻终止,退出
???
try的代码段假如没有抛出异常(可能是调用的函数抛出异常),catch确实捕获不到异常;用try catch而不用if能够很快的跳出深层嵌套啊。能够让代码更清晰。
(2)
1里提到了可以捕获深层异常,假如调用的函数中抛出了异常,c++会沿调用链向上回溯(不是通过return回溯),找到第一个try块,
然 后找到对应的catch,假如该异常能被catch处理(类型匹配,其中...处理所有异常),则catch块处理该异常,然后按正常程序继续走下去,回 到正常的函数调用返回链。假如一直找不到一个try,catch块,就会调用C++的“未处理异常捕获器”,这个函数指针是可以设置的,他的默认行为是终 止程序。
(3) throw的用处是抛出异常,正常的返回用return,而异常用throw。这样程序可以集中处理返回值(这里的返回值不同于C,每个返回值都是正确的,只是含义不同,而C的返回值可能代表着错误),而错误集中在catch块处理,代码逻辑会更清晰明了
详细解决方案
try catch throw php收集
热度:833 发布时间:2012-12-20 09:53:21.0
try
相关解决方案
- java中tr{} catch{}的语法作用,在什么时候用,该如何解决
- catch(java.io.IOException e){
- catch ( org.springframework.dao.DataAccessException e) {
- try catch finally有关问题
- 关于try catch finally,请详解解决办法
- throws 与 try{ }catch{ },该如何处理
- throw new CException;在vc6中没有关问题(vc++技术内幕中的一个例子里),但在vs2008里调试出错了!
- 麻烦解释一上 上面这个 try .catch 有关问题
- throw new Exception("不得为空");如何换行
- try.catch.求教解决思路
- throw new Exception("Message.")什么意思?该如何处理
- try{}catch{}错误有关问题
- throw new ApplicationException("")解决方案
- 请教在一个try.catch.finally.结构中怎么认为制造错误
- 異常處理,catch(Exception ex)中的ex.Message怎樣在alert中調用到?解决思路
- [分享]try,catch,finally执行流程
- 关于java中的try-catch-finally语句和return
- 怎么在父窗口等待子窗口载入完成? try catch
- try catch throw php收集
- PHP里面如何用try…catch
- javascript 中TRY .CATCH 处理异常的用法
- JavaScript 例外处置Try{}catch(e){}
- JavaScript中try catch finally 施用
- 对try. catch 的1点理解
- JS 应用try.catch
- 转载:全面介绍javascript错误处理(try…catch…finally window.onerror)
- JavaScript的例外处理(try.catch.finally)
- JS的try.catch.finally
- JavaScript的例外处置(try.catch.finally)
- javascript tyr.catch 什么时候用最好