读书人

错误的小疑点!

发布时间: 2012-02-16 21:30:36 作者: rapoo

异常的小问题!!!
是不是在用try捕获异常的时候必须在前面用throw显示的抛出,
而对于标准库提贡的一些函数是不是在本身定义的时候就已经
考虑了异常的可能了,所以我们能够直接捕获到那些异常呢?比如new
try{
char *p=new("construct");
}
catch(...){
delete p;
}
另外我看到书上说永远不要在析构函数中抛出异常,这是指让我们
不能显示的用throw抛出吧

[解决办法]
捕获异常的时候可以不用throw显示的抛出
1)如果析构函数抛出异常,则异常点之后的程序不会执行,如果析构函数在异常点之后执行了某些必要的动作比如释放某些资源,则这些动作不会执行,会造成诸如资源泄漏的问题。

2)通常异常发生时,c++的机制会调用已经构造对象的析构函数来释放资源,此时若析构函数本身也抛出异常,则前一个异常尚未处理,又有新的异常,会造成程序崩溃的问题。

[解决办法]
异常是必须要抛出才能够catch的,你所见的那些不是没抛出,是在你没看到的地方抛出的!

另外,异常的处理机制是比较复杂的,你得系统的看一下才行
[解决办法]
在new的内部throw了一个异常bac_alloc,于是catch就能捕获到了。

读书人网 >C++

热点推荐