![](/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.