[英]How should I use C++ constructor exceptions?
直到几天前,我才从未尝试过使用C ++异常,而且我不确定自己是否做对了。 我试图在失败的构造函数上引发异常,例如
X::X() {
/*...*/
if(error)
throw;
/*...*/
}
并像这样使用它:
try {
X a;
X b;
X c;
}
catch (...) {
// error handling
}
调试器(VS)表示有未处理的异常。 抛出后的代码被执行(尽管抛出虽然像返回一样工作),但catch块未执行。 我在这里想念什么? 我可能将这篇文章简化了一些,但是原始代码在这里发布有点复杂。
这是因为您没有抛出异常对象。 您应该这样使用throw:
throw std::runtime_error("Error message");
那么您就可以通过
try {
...
} catch (const std::runtime_error& e) {
/* Handling */
}
看看stdexcept
标头。
您应该throw
一些异常 (通常是std :: exception的某些子类的实例),例如
X::X() {
/*...*/
if(error)
throw std::runtime_error("my bad");
/*...*/
}
有关更多信息,请参见std :: runtime_error 。
我同意Danvil的回答 :在构造函数中引发异常的味道很差。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.