我遇到了一些我继承的代码的情况......老实说,我相信代码写得正确,但这个错误似乎仍然存在.
我会很快注意到代码是从linux到LynxOS的交叉编译,我不确定这是否与错误有关.
基本上,在一个特定情况下:
try {
std::vector<ClassA> x = SomeGeneratingFunction();
//We get to here fine. X may be empty/unpopulated though.
if (x.size() < 1)
{
throw(MyException("It crashed."));
}
}
catch (MyException e)
{
//Handle it.
}
catch (...)
{
//Handle it.
}
Run Code Online (Sandbox Code Playgroud)
我们抛弃给定的向量是未填充的,但由于某种原因,抛出绕过catch子句 - 两者都是.它似乎只发生在这里 - 虽然我们通常不会形成一个if语句范围,但这应该是完全不相关的,因为它仍然在try范围内.
PS:下面的代码实际上是一个函数的内容,并且在调用函数时会出现异常,即使它们都应该由catch块处理.
任何想法如何可能?是的,这不是真正的代码/异常类,但异常类是你重写std :: exception的谷歌的简单例子,SomeGeneratingFunction()确实返回一个好的向量,即使它是空的.我不能提供真正的代码,但这是非常接近的,除非我可能已经把它写成了我的头脑.
提前感谢任何想法!
-w00te
Mar*_*ata 11
由于该catch (...)条款没有捕获异常,我的答案并没有解决OP的问题.但对于那些在SO上发现这个问题的人来说,也许我的答案是有用的,因为它解释了为什么第一次捕获失败.
我有一个类似的问题,我catch(const std::exception& ex)只是不工作.事实证明这是一个愚蠢的问题,因为我在C#和C++异常之间切换,在C#中你需要指定new何时抛出异常,而在C++中你通常不会(但你可以,但在这种情况下你投掷指针而不是参考).我不小心做了
throw new std::runtime_error("foo");
Run Code Online (Sandbox Code Playgroud)
所以
catch(std::exception* ex)
Run Code Online (Sandbox Code Playgroud)
会抓住它但是
catch(std::exception& ex)
Run Code Online (Sandbox Code Playgroud)
没有.当然,解决方案只是删除新语句,因为这不是C++中的传统设计模式.
| 归档时间: |
|
| 查看次数: |
9661 次 |
| 最近记录: |