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