re: 覺得 Loki::ScopeGuard 似乎不該在它自己里面 try … catch …
2011-03-26 07:26 |
rollback函數(shù)本身就不應(yīng)該拋出異常。
異常安全的代碼依賴一些無拋出的代碼來執(zhí)行commit或者rollback。
所以:
1. 本來面目是還不了的
rollback動作就應(yīng)該無拋出的執(zhí)行, 無論它本身是一個無拋出的函數(shù), 還是被scopeguard的析構(gòu)所吞掉。
2. scopeguard是否應(yīng)該插手
我也認為它多管閑事了。
無拋出是rollback函數(shù)自身的責任。
沒有無拋出保證就不能稱為一個rollback。
應(yīng)該努力將其寫為rollback, 然后scopeguard僅僅考慮注冊而已。
對實在沒有時間與精力寫為無拋出的rollback, 可自行吞掉:
rollback_nothrow(...) { rollback(...) }
makeguard(rollback_nothrow, ...)
3. loki
loki應(yīng)該算是一個實驗/教學性質(zhì)的庫吧?
所以盡可能的多傳授一些C++的知識, 比如"析構(gòu)絕對不能拋出異常"。
而沒太注重"該保證是誰的責任"。
所以就選擇一個簡單且效率稍微有點低的方案了。
回復(fù) 更多評論