• <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  評論-947  文章-0  trackbacks-0

            ScopeGuard 只是幫我們調用一個函數而已,至于這個函數是否有異常出來,它不該悄悄地把它吞了,而應該還我們本來面目,不知道是不是?可是為什么幾乎所有介紹 ScopeGuard 的文章都說這 try … catch … 用得好呢?

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

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

            所以:
            1. 本來面目是還不了的
            rollback動作就應該無拋出的執行, 無論它本身是一個無拋出的函數, 還是被scopeguard的析構所吞掉。

            2. scopeguard是否應該插手
            我也認為它多管閑事了。
            無拋出是rollback函數自身的責任。
            沒有無拋出保證就不能稱為一個rollback。
            應該努力將其寫為rollback, 然后scopeguard僅僅考慮注冊而已。
            對實在沒有時間與精力寫為無拋出的rollback, 可自行吞掉:
            rollback_nothrow(...) { rollback(...) }
            makeguard(rollback_nothrow, ...)

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

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

            loki應該是為了簡單吧, 一頂倆……  回復  更多評論
              
            伊人久久大香线蕉AV色婷婷色| 国内精品久久久人妻中文字幕| 国产午夜精品久久久久九九| 久久99精品久久久久久水蜜桃| 亚洲国产精品综合久久一线| 18禁黄久久久AAA片| 精品国产VA久久久久久久冰 | 久久精品视屏| 久久狠狠爱亚洲综合影院 | 久久综合视频网站| 久久99久久99精品免视看动漫| 久久精品国产69国产精品亚洲| 亚洲国产成人精品女人久久久| 无码人妻久久久一区二区三区| 久久久久亚洲AV无码永不| 久久成人18免费网站| 伊人久久综合成人网| 久久精品无码免费不卡| 国产精品久久精品| 无码人妻久久一区二区三区蜜桃| 伊人久久综合热线大杳蕉下载| 久久精品国产亚洲AV影院| 国产—久久香蕉国产线看观看| 亚洲国产精品成人久久| 亚洲国产成人乱码精品女人久久久不卡 | 日韩精品国产自在久久现线拍| 欧美丰满熟妇BBB久久久| 精品欧美一区二区三区久久久| 99re久久精品国产首页2020| 麻豆av久久av盛宴av| 一本一道久久a久久精品综合 | 久久青草国产精品一区| 色欲综合久久躁天天躁蜜桃| 性做久久久久久久久久久| 国产91久久综合| 国产福利电影一区二区三区,免费久久久久久久精 | 亚洲国产成人久久综合野外| 久久人人爽人人爽人人AV东京热 | 99久久精品免费看国产一区二区三区 | 国产99精品久久| 久久久午夜精品福利内容|