• 13185阅读
  • 8回复

[讨论]try catch到底能防止什么错误? [复制链接]

上一主题 下一主题
离线stlcours
 

只看楼主 倒序阅读 楼主  发表于: 2014-11-24
我在.h文件里定义:
    LoadingWidget* w;
然后.cpp文件里定义:

void MyClass::ModifyTask()
{
    // w = new LoadingWidget(); // 忘了生成实例
    try {
        w->show();    
    } catch (int e) {
        QMessageBox::warning(this, ("error"), ("Please input server address!"));
    }
}
尽管写上了try catch,程序照样崩溃。够差劲的。是我哪里没明白吗?我在另一个语言里这样写就不会出问题,程序不会崩溃。
离线圣域天子

只看该作者 1楼 发表于: 2014-11-25
是VC吧? 我以前看到它对try catch 默认不支持了,需要修改设置的
http://blog.csdn.net/yu444/article/details/5612714
离线dbzhang800

只看该作者 2楼 发表于: 2014-11-25
C++ 异常 是用来捕捉你在代码内中用throw抛出的异常的。像非法地址、除数为零等等,都不属于C++异常!!
离线stlcours

只看该作者 3楼 发表于: 2014-11-25
回 dbzhang800 的帖子
dbzhang800:C++ 异常 是用来捕捉你在代码内中用throw抛出的异常的。像非法地址、除数为零等等,都不属于C++异常!! (2014-11-25 14:00) 

delphi的try catch可以捕捉非法地址、除数为零。
离线stlcours

只看该作者 4楼 发表于: 2014-11-25
回 圣域天子 的帖子
圣域天子:是VC吧? 我以前看到它对try catch 默认不支持了,需要修改设置的
http://blog.csdn.net/yu444/article/details/5612714
 (2014-11-25 09:32) 

是VC编译的QT程序,尽管你的那篇文章解释的比较清楚,不过我还是觉得相当的友邦惊诧。因为delphi里就可以捕捉任何错误,java好像也是这样。写throw相当于程序员已经预料到了会出现什么错误,还不日写正常的代码来个else判断就行了。这样的try catch实在是意义不大。不过微软是老牌帝国,它对try catch这样理解,肯定还有更深层次的原因,你说呢。
离线dbzhang800

只看该作者 5楼 发表于: 2014-11-25
回 stlcours 的帖子
stlcours:delphi的try catch可以捕捉非法地址、除数为零。 (2014-11-25 19:17) 

不同的语言,你不能这么去类比。你不能要求一个C++编译器去支持C++标准没有要求的东西。尽管长期以来MSVC对C++标准的支持非常差劲,但这部分应该没什么问题。更何况,它还通过自己的扩展提供了结构化异常的支持。
离线stlcours

只看该作者 6楼 发表于: 2015-06-26
新的体会:实践必须要求try catch来预防崩溃,比如打开一个无法读写的文件。。。。正常流程一定崩溃。。。。,要是每次都判断吧,效率太低,而且仍有可能崩溃。所以一定要使用try catch,而且要用好。

请各位继续探讨。。。
离线cnzyy2000

只看该作者 7楼 发表于: 2015-06-26
可以用SEH
离线z55716368

只看该作者 8楼 发表于: 2015-06-30
我现在用try来判断串口的一些操作,感觉完全没有作用
每一个问题 都是一次进步
快速回复
限100 字节
 
上一个 下一个