我几天前从未尝试过使用C ++异常,而且我不确定我是否正确行事。我试图在失败的构造函数上抛出异常,比如
X::X() {
/*...*/
if(error)
throw;
/*...*/
}
使用它像:
try {
X a;
X b;
X c;
}
catch (...) {
// error handling
}
调试器(VS)说抛出时有一个无法解决的异常。抛出后的代码被执行(我虽然像返回一样工作),并且没有执行catch块。我在这里错过了什么? 我可能稍微过分简化了这篇文章,但原始代码在这里发布有点复杂。
答案 0 :(得分:2)
这是因为你没有抛出异常对象。你应该像这样使用throw:
throw std::runtime_error("Error message");
然后你就能通过
捕获它try {
...
} catch (const std::runtime_error& e) {
/* Handling */
}
查看stdexcept
标题。
答案 1 :(得分:1)
你应该throw
some exception(通常是std::exception的某个子类的实例),例如
X::X() {
/*...*/
if(error)
throw std::runtime_error("my bad");
/*...*/
}
有关详情,请参阅std::runtime_error。
没有任何异常的 throw;
仅在catch block内有意义。
我同意Danvil's answer:在构造函数中抛出异常是很糟糕的。