• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-90  評(píng)論-947  文章-0  trackbacks-0

            ScopeGuard 只是幫我們調(diào)用一個(gè)函數(shù)而已,至于這個(gè)函數(shù)是否有異常出來(lái),它不該悄悄地把它吞了,而應(yīng)該還我們本來(lái)面目,不知道是不是?可是為什么幾乎所有介紹 ScopeGuard 的文章都說(shuō)這 try … catch … 用得好呢?

            posted on 2011-03-23 09:39 溪流 閱讀(2540) 評(píng)論(6)  編輯 收藏 引用 所屬分類: C++

            評(píng)論:
            # re: 覺(jué)得 Loki::ScopeGuard 似乎不該在它自己里面 try &hellip; catch &hellip; 2011-03-23 10:16 | expter
            如果關(guān)注函數(shù)本身代碼有異常,
            就需要try..catch來(lái)處理了,異常發(fā)生時(shí)堆棧會(huì)unwind,而且代碼看起太丑陋,就封裝下咯。
            Loki::ScopeGuard 輕量的RAII ,對(duì)資源管理與異常安全提供比較好,可以只關(guān)注于異常部分。  回復(fù)  更多評(píng)論
              
            # re: 覺(jué)得 Loki::ScopeGuard 似乎不該在它自己里面 try &hellip; catch &hellip; 2011-03-23 10:34 | airtrack
            Loki::ScopeGuard實(shí)際上是一個(gè)通用的RAII,它是通過(guò)在ScopeGuardImplBase的所有派生類的析構(gòu)函數(shù)里面SafeExecute(*this)來(lái)做到RAII,而在SafeExecute做資源釋放操作是通過(guò)調(diào)用派生類的fun_,如果不try...catch,那么fun_執(zhí)行如果發(fā)生異常的話,那異常就逃離了析構(gòu)函數(shù)。在C++中析構(gòu)函數(shù)是不應(yīng)該有異常產(chǎn)生的,詳見(jiàn)《Effective C++》。  回復(fù)  更多評(píng)論
              
            # re: 覺(jué)得 Loki::ScopeGuard 似乎不該在它自己里面 try &hellip; catch &hellip; 2011-03-25 11:09 | 無(wú)民事
            朋友你的QQ多少?可以交流下嗎?  回復(fù)  更多評(píng)論
              
            # re: 覺(jué)得 Loki::ScopeGuard 似乎不該在它自己里面 try &hellip; catch &hellip; 2011-03-26 07:26 | OwnWaterloo
            rollback函數(shù)本身就不應(yīng)該拋出異常。
            異常安全的代碼依賴一些無(wú)拋出的代碼來(lái)執(zhí)行commit或者rollback。

            所以:
            1. 本來(lái)面目是還不了的
            rollback動(dòng)作就應(yīng)該無(wú)拋出的執(zhí)行, 無(wú)論它本身是一個(gè)無(wú)拋出的函數(shù), 還是被scopeguard的析構(gòu)所吞掉。

            2. scopeguard是否應(yīng)該插手
            我也認(rèn)為它多管閑事了。
            無(wú)拋出是rollback函數(shù)自身的責(zé)任。
            沒(méi)有無(wú)拋出保證就不能稱為一個(gè)rollback。
            應(yīng)該努力將其寫為rollback, 然后scopeguard僅僅考慮注冊(cè)而已。
            對(duì)實(shí)在沒(méi)有時(shí)間與精力寫為無(wú)拋出的rollback, 可自行吞掉:
            rollback_nothrow(...) { rollback(...) }
            makeguard(rollback_nothrow, ...)

            3. loki
            loki應(yīng)該算是一個(gè)實(shí)驗(yàn)/教學(xué)性質(zhì)的庫(kù)吧?
            所以盡可能的多傳授一些C++的知識(shí), 比如"析構(gòu)絕對(duì)不能拋出異常"。
            而沒(méi)太注重"該保證是誰(shuí)的責(zé)任"。
            所以就選擇一個(gè)簡(jiǎn)單且效率稍微有點(diǎn)低的方案了。  回復(fù)  更多評(píng)論
              
            # re: 覺(jué)得 Loki::ScopeGuard 似乎不該在它自己里面 try &hellip; catch &hellip; 2011-03-28 14:49 | 溪流
            @OwnWaterloo
            你也認(rèn)為它多管閑事了?!好~哈哈!  回復(fù)  更多評(píng)論
              
            # re: 覺(jué)得 Loki::ScopeGuard 似乎不該在它自己里面 try &hellip; catch &hellip; 2011-03-28 18:45 | OwnWaterloo
            @溪流
            恩, 我還覺(jué)得 loki.scopeguard應(yīng)該區(qū)分為
            1. rollback 注冊(cè)的動(dòng)作可取消 —— loki.scopeguard實(shí)際實(shí)現(xiàn)
            2. on_exit 注冊(cè)的動(dòng)作一定執(zhí)行 —— 其實(shí)這個(gè)用得不少

            將 loki.scopeguard 用于 on_exit 的情況很浪費(fèi)啊……
            需要開辟局部變量, 需要 if 測(cè)試, 而且這個(gè)測(cè)試代碼是在每一個(gè)退出點(diǎn)產(chǎn)生的……
            這些開銷根本不需要的。

            loki應(yīng)該是為了簡(jiǎn)單吧, 一頂倆……  回復(fù)  更多評(píng)論
              
            久久精品国产亚洲av麻豆蜜芽| 日韩av无码久久精品免费| 国产精品成人无码久久久久久| 国内精品欧美久久精品| 狠狠色婷婷久久一区二区| 久久精品国产亚洲一区二区| 久久久久这里只有精品| 国产精品国色综合久久| 亚洲欧美成人久久综合中文网 | 国产精品成人久久久久三级午夜电影| 久久伊人五月天论坛| 国产成人精品白浆久久69| 久久久91人妻无码精品蜜桃HD | 精品久久香蕉国产线看观看亚洲| 日韩va亚洲va欧美va久久| 久久久久夜夜夜精品国产| 欧美精品国产综合久久| 久久久久亚洲av成人无码电影 | 国产精品一久久香蕉产线看 | 久久精品中文騷妇女内射| 久久久国产视频| 午夜精品久久久内射近拍高清| 国产精品成人久久久久三级午夜电影| 久久久久亚洲av无码专区| 77777亚洲午夜久久多人| 中文字幕精品久久| 伊人精品久久久久7777| 亚洲国产精品无码久久久久久曰| 久久一本综合| 亚洲精品乱码久久久久久自慰| 精品久久久久久| 久久精品亚洲AV久久久无码| 久久综合九色综合精品| 久久久久国产亚洲AV麻豆| 国内精品久久久久久中文字幕 | 精品久久综合1区2区3区激情| 久久久精品午夜免费不卡| 国产ww久久久久久久久久| 91麻豆精品国产91久久久久久| 9999国产精品欧美久久久久久| 久久精品18|