std::cout << "~MyExcepction is called" << std::endl;
}
// 獲取錯誤碼
int getErrorId()
{
return m_errorId;
}
private:
// 錯誤碼
int m_errorId;
};
int main(int argc, char* argv[])
{
// 內(nèi)存泄露檢測機制
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
// 可以改變錯誤碼,以便拋出不同的異常進行測試
int throwErrorCode = 110;
std::cout << " input test code :" << std::endl;
std::cin >> throwErrorCode;
try
{
if ( throwErrorCode == 110)
{
MyExcepction myStru(110);
// 拋出對象的地址 -> 由catch( MyExcepction* pMyExcepction) 捕獲
// 這里該對象的地址拋出給catch語句,不會調(diào)用對象的拷貝構(gòu)造函數(shù)
// 傳地址是提倡的做法,不會頻繁地調(diào)用該對象的構(gòu)造函數(shù)或拷貝構(gòu)造函數(shù)
// catch語句執(zhí)行結(jié)束后,myStru會被析構(gòu)掉
throw &myStru;
}
else if ( throwErrorCode == 119 )
{
MyExcepction myStru(119);
// 拋出對象,這里會通過拷貝構(gòu)造函數(shù)創(chuàng)建一個臨時的對象傳出給catch
// 由catch( MyExcepction myExcepction) 捕獲
// 在catch語句中會再次調(diào)用通過拷貝構(gòu)造函數(shù)創(chuàng)建臨時對象復(fù)制這里傳過去的對象
// throw結(jié)束后myStru會被析構(gòu)掉
throw myStru;
}
else if ( throwErrorCode == 120 )
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |