異常安全是指代碼能夠自己處理異常,即出現異常時仍能正常工作;異常中立是指代碼將所有異常都轉給調用者。
如果只需捕獲“...”部分的異常,如:
try {TryCode();} catch(...) {CatchCode(parms); throw;}
可以改寫成:
struct Janitor{
Janitor(Parms p) : pa(p) {};
~Janitor() {if uncaught_exception() CatchCode(pa); }
Parms pa;
};
在try代碼之前創建一個Janitor對象,如果拋出異常,那么將執行CatchCode函數。
另:異常安全需要多多研究。
文章來源:
http://my.donews.com/robinchow/2007/01/10/esmxouitpvwdhegigrvhvlffqxlbvsrzkdwz/