// 這樣做的話,如果catch( MyExcepction* pMyExcepction)中不執(zhí)行delete操作則會(huì)發(fā)生內(nèi)存泄露
// 由catch( MyExcepction* pMyExcepction) 捕獲
MyExcepction * pMyStru = new MyExcepction(120);
throw pMyStru;
}
else
{
// 直接創(chuàng)建新對(duì)象拋出
// 相當(dāng)于創(chuàng)建了臨時(shí)的對(duì)象傳遞給了catch語句
// 由catch接收時(shí)通過拷貝構(gòu)造函數(shù)再次創(chuàng)建臨時(shí)對(duì)象接收傳遞過去的對(duì)象
// throw結(jié)束后兩次創(chuàng)建的臨時(shí)對(duì)象會(huì)被析構(gòu)掉
throw MyExcepction(throwErrorCode);
}
}
catch( MyExcepction* pMyExcepction)
{
// 輸出本語句被執(zhí)行信息
std::cout << "執(zhí)行了 catch( MyExcepction* pMyExcepction) " << std::endl;
// 輸出錯(cuò)誤信息
std::cout << "error Code : " << pMyExcepction->getErrorId()<< std::endl;
// 異常拋出的新對(duì)象并非創(chuàng)建在函數(shù)棧上,而是創(chuàng)建在專用的異常棧上,不需要進(jìn)行delete
//delete pMyExcepction;
}
catch ( MyExcepction myExcepction)
{
// 輸出本語句被執(zhí)行信息
std::cout << "執(zhí)行了 catch ( MyExcepction myExcepction) " << std::endl;
// 輸出錯(cuò)誤信息
std::cout << "error Code : " << myExcepction.getErrorId()<< std::endl;
}
catch(...)
{
// 輸出本語句被執(zhí)行信息
std::cout << "執(zhí)行了 catch(...) " << std::endl;
// 處理不了,重新拋出給上級(jí)
throw ;
}
// 暫停
int temp;
std::cin >> temp;
return 0;
}
相關(guān)推薦:2010年9月計(jì)算機(jī)等級(jí)考試成績查詢時(shí)間匯總
2011年計(jì)算機(jī)等級(jí)考試二級(jí)C++輔導(dǎo)筆記匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |