异常安全是指代码能够自己处理异常,即出现异常时仍能正常工作;异常中立是指代码将所有异常都转给调用者。
如果只需捕获“…”部分的异常,如:
try
{
TryCode();
}
catch(…)
{
CatchCode(parms);
throw;
}
可以改写成:
struct Janitor
{
Janitor(Parms p) : pa(p) {};
~Janitor() {if uncaught_exception() CatchCode(pa); }
Parms pa;
};
在try代码之前创建一个Janitor对象,如果抛出异常,那么将执行CatchCode函数。
另:异常安全需要多多研究。
归类于: Exceptional C++ — robinchow @ 8:41 pm