C ++ catch构造函数异常

时间:2010-04-17 05:09:31

标签: c++ exception constructor

我似乎不明白如何捕获构造函数异常。 以下是相关代码:

     struct Thread {
            rysq::cuda::Fock fock_;
            template<class iterator>
            Thread(const rysq::cuda::Centers &centers,
                   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 ++。

3 个答案:

答案 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表示异常情况。