异常安全是指代码能够自己处理异常,即出现异常时仍能正常工作;异常中立是指代码将所有异常都转给调用者。
如果只需捕获“...”部分的异常,如:
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/