簡體   English   中英

例外。 嘗試-抓塊

[英]Exceptions. Try - catch block

我得到以下代碼:

set<Object*>::iterator it;
try
    {
        for (it = SetOfObjects->begin(); it != SetOfObjects->end(); ++it)
        {
            //some actions, not applicable to the question
        }
    }
    catch(...)
    {
        this->m_error_raiser->error_Name = "Station isn`t connected to Object! Use connectToObject method or list of forecast objects is empty";
        this->m_error_raiser->error_Number = 101;
        //throw (this->m_error_raiser);
    }

當沒有創建SetOfObjects實例時,我嘗試遍歷該集合時,出現了預期的運行時錯誤。

因此,我決定處理該錯誤,並通過try catch將該錯誤的信息提供給用戶。

我的問題:盡管我捕獲了所有異常,因此它們被視為已處理,但我的程序仍在運行時終止,這與我期望它的行為相矛盾:它應繼續工作,因為所有生成的異常均已得到處理。 怎么了

如果object是指針並且未初始化,則使用此類對象是undefined behaviour 您不能通過exception handling (按標准)來exception handling此類指針的使用。 默認情況下,僅將其初始化為0,並在使用前確認指針不為null

從技術上講,在Windows環境中,您可以捕獲這樣的低級異常(取消引用空值/未初始化的指針)-SEH異常。 這是通過使用Microsoft特定的__try()和__except()語句完成的。

如果您有一個外部寫得不好的庫,那么它可能會崩潰(跟隨空指針等),而不是報告錯誤(即找不到文件時),這可能很有用。

但是,正如注釋中已經提到的那樣,在您的代碼中使用它是不可移植的。 而且它們不能與C ++異常互操作。 因此,即使您決定使用它們,也將最終得到2種異常處理機制的垃圾郵件……可能是錯誤的設計)

但是,如果您的代碼依賴於異常處理來報告錯誤,則始終可以進行null檢查並在失敗時拋出自定義異常: if(pointer==NULL) throw something;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM