#include#include using namespace std; class FileError{}; class MemoryError{}; void foo(void)throw(MemoryError,FileError,int,double); int main(void) { try{ foo(); } catch(FileError& ex){ cout << "file error!" << endl; return -1; } catch(MemoryError& ex){ cout << "memory error!" << endl; return -1; } catch(int ex&){//int類(lèi)型只能捕捉double,同樣double只能捕捉double. cout << ex << endl; } catch(...){//這里會(huì)捕捉所有異常列表的異常對(duì)象 cout << "other error!" << endl; return -1; } return 0; } void foo(void)throw(FileError,MemoryError,int,double){//與函數(shù)聲明一樣,不多不少. throw -1; //throw FileError(); }
異常說(shuō)明:
1)可以在函數(shù)原型中增加異常說(shuō)明,說(shuō)明該函數(shù)所有可能拋出的異常類(lèi)型.
返回類(lèi)類(lèi)型 函數(shù)名(形參表)throw(對(duì)象1,對(duì)象2,...);(這里對(duì)象可以為基本類(lèi)型)
對(duì)象1,對(duì)象2...被稱(chēng)為異常說(shuō)明表
2)函數(shù)的異常說(shuō)明是一種承諾,表示函數(shù)所拋出的異常不會(huì)超出異常說(shuō)明表,如果超出,將無(wú)法被捕獲
即使catch中接受對(duì)象的類(lèi)型也無(wú)法被捕獲,最終會(huì)被系統(tǒng)捕獲,終止程序.
3)throw;表示可以拋出任何異常,thow();表示不會(huì)拋出異常
4)如果函數(shù)申明和定義分開(kāi),如果聲明時(shí)有異常說(shuō)明,則定義時(shí)也要有異常說(shuō)明,異常說(shuō)明表要一模一樣,
當(dāng)然,異常說(shuō)明表中異常對(duì)象的位置可以隨意.
5)如果基類(lèi)中的虛函數(shù)帶有異常說(shuō)明,那么該函數(shù)在子類(lèi)中的覆蓋版本不能在異常說(shuō)明表中拋出的異常對(duì)象不能比基類(lèi)多(屬于包含關(guān)系)
6)如果構(gòu)造函數(shù)中拋出異常,則對(duì)象將不會(huì)調(diào)用析構(gòu)函數(shù)(怎么都不會(huì)調(diào)用),這時(shí)需要手動(dòng)銷(xiāo)毀在異常之前
7)不允許在析構(gòu)函數(shù)中拋出異常,如果你在析構(gòu)中拋異常,這個(gè)類(lèi)一旦實(shí)例化,就報(bào)錯(cuò).
所有動(dòng)態(tài)分配的資源.
#includeusing namespace std; class A{ public: A():m_p(new int(5)){ cout << "A:A()" << endl; delete m_p; throw -1;//析構(gòu)函數(shù)不會(huì)調(diào)用,拋出異常前,手動(dòng)釋放動(dòng)態(tài)分配的內(nèi)存 } ~A(){ cout << "haha" << endl; delete m_p; } private: int* m_p; }; int main(void){ A a;//這樣就直接報(bào)錯(cuò). return 0; }
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。