我似乎不明白如何捕获构造函数异常。 以下是相关代码:
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 ++。
答案 0 :(得分:8)
你必须抛出一个物体,例如,
throw std::exception();
没有操作数的 throw
仅在catch
块内使用,以重新抛出catch
块处理的异常。
答案 1 :(得分:3)
为了抓住任何东西,你必须抛出一些东西。
尝试更改行
if (!fock_) throw;
到
if (!fock_) throw "";
并观察其差异。
答案 2 :(得分:3)
你需要扔东西。仅throw
就意味着“重新抛出”当前的异常。如果没有当前异常,则会调用unexpected
,这可能会中止您的程序。
最好选择一个描述问题的<stdexcept>
类。 logic_error
或表示编程错误的衍生词,或runtime_error
表示异常情况。