![](/img/trans.png)
[英]Where am I supposed to catch the C++ exception thrown in the constructor?
[英]C++ catch constructor exception
我似乎不明白如何捕获构造函数异常。 这是相关代码:
struct Thread {
rysq::cuda::Fock fock_;
template<class iterator>
Thread(const rysq::cuda::Centers ¢ers,
const iterator (&blocks)[4])
: fock_()
{
if (!fock_) throw;
}
};
Thread *ct;
try { ct = new Thread(centers_, blocks); }
catch(...) { return false; } // catch never happens,
所以catch语句不执行,我得到未处理的异常。 我做错了什么? 这是使用g ++的直接C ++。
你必须扔一个物体,例如,
throw std::exception();
throw
无操作数仅用于一个内部catch
块重新抛出由正在处理的异常catch
块。
为了抓住任何东西,你必须抛出一些东西。
尝试更改线路
if (!fock_) throw;
至
if (!fock_) throw "";
并观察差异。
你需要抛出一些东西。 单独throw
意味着“重新抛出”当前的异常。 如果没有当前异常,则调用unexpected
,这可能会中止您的程序。
最好从<stdexcept>
中选择一个描述问题的类。 logic_error
或指示编程错误的派生词,或指示异常情况的runtime_error
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.