在混合代碼C++應用程序中捕獲std和系統異常的正確方法是什麼?在混合C++中捕獲std異常和系統異常
是什麼?
try
{
// using pure C++ and managed components
}
catch(std::exception exp)
{
}
catch(System::Exception sexp)
{
}
在混合代碼C++應用程序中捕獲std和系統異常的正確方法是什麼?在混合C++中捕獲std異常和系統異常
是什麼?
try
{
// using pure C++ and managed components
}
catch(std::exception exp)
{
}
catch(System::Exception sexp)
{
}
通過引用捕獲異常。對託管異常的強烈要求,對於本機C++異常是可選的,但仍然是一個好主意。它只是拼寫不同:
try {
// stuff
}
catch (std::exception& ex) {
}
catch (System::Exception^ ex) {
}
抓住了他們,所有的異常處理然而幾乎從來沒有一個好主意。
趕上他們參照,避免切片爲std::exception
派生的異常:
catch (std::exception &exp)
這樣就可以適當地捕捉所有派生的異常。 (Polymorphism)
請閱讀this MS-Blog-Post。 特別是它說:「一般來說,更容易處理託管代碼中的本地錯誤/異常,反過來......」 受管異常以SEH異常的形式到達本地部分,並且信息比較減少管理ecxeptions。
所以,不,你的代碼片段不正確。
良好的做法或所有原生的例外!只有當一個庫特別說明你必須通過指針捕獲異常時,你必須**通過指針捕獲。 – Henno
@Henno:哦,上帝,有這樣的圖書館嗎?那太糟了。他們的圖書館以什麼方式打破了這種需求? –
不!我的意思是用另一種方式:當**你**正在使用別人的nativ庫時,那麼...... – Henno