• <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>

            Note of Justin

            關(guān)于工作和讀書的筆記

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              47 Posts :: 0 Stories :: 45 Comments :: 0 Trackbacks

            留言簿(14)

            搜索

            •  

            積分與排名

            • 積分 - 52520
            • 排名 - 433

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            原創(chuàng)文章歡迎轉(zhuǎn)載,但請(qǐng)保留作者信息]
            Justin 于 2010-01-03

            這里我所說的“對(duì)異常免疫的代碼”,原文是exception-safe code。(侯捷的版本是“異常安全代碼”,不過我覺得自己的版本比較容易理解……)

            對(duì)異常免疫的函數(shù)在異常發(fā)生的時(shí)候應(yīng)該具備兩個(gè)特征:
            • 不泄漏任何資源(內(nèi)存、鎖等等)
            • 不造成任何數(shù)據(jù)結(jié)構(gòu)的損壞
            并能夠提供至少以下保證中的一項(xiàng):
            • 基本的保證:當(dāng)異常拋出時(shí),程序中的對(duì)象、數(shù)據(jù)免遭破壞。
            • 較強(qiáng)的保證:當(dāng)異常拋出時(shí),程序的狀態(tài)不會(huì)被改變。
              從狀態(tài)機(jī)的角度來看,若成功調(diào)用函數(shù),則系統(tǒng)進(jìn)入成功后的狀態(tài);如果函數(shù)中因異常而出錯(cuò),系統(tǒng)應(yīng)該留在調(diào)用函數(shù)前的狀態(tài):也就是說,系統(tǒng)在調(diào)用函數(shù)后,只會(huì)有兩種狀態(tài)。這是比前一條更強(qiáng)的保證。(看來Scott也愛上了比喻:書中說這就好比女生懷孕,要么就是懷上了,要么就是沒中招,沒人能“半”懷孕的@#¥%)
            • 最強(qiáng)的保證:不會(huì)有異常拋出。例如對(duì)內(nèi)置類型的操作就不會(huì)拋出異常。這是最理想的,但也很難做到。更多的函數(shù)只能在前兩者中做一選擇。
            為了能夠提供較強(qiáng)的保證,也即系統(tǒng)的狀態(tài)不因異常拋出與否而變化,大師又重新提出了“先拷貝后交換”(copy-and-swap)這一方法論來。
            用不那么嚴(yán)謹(jǐn)?shù)恼f法:為了避免在操作對(duì)象時(shí)觸發(fā)異常影響系統(tǒng)狀態(tài),“先拷貝后交換”先是創(chuàng)建了一個(gè)臨時(shí)對(duì)象,將所有的操作都施加在該臨時(shí)對(duì)象上。如果沒有出錯(cuò),把這個(gè)處理過的臨時(shí)對(duì)象和真正需要處理的對(duì)象交換一通,算是順利完成任務(wù);如果有錯(cuò)并拋出了異常,原系統(tǒng)狀態(tài)也不會(huì)被影響,因?yàn)檎嬲枰幚淼膶?duì)象根本沒有被動(dòng)過。
            當(dāng)然,天下沒有免費(fèi)的午餐。
            “先拷貝后交換”不僅耗費(fèi)了一個(gè)臨時(shí)對(duì)象的存儲(chǔ)代價(jià),同時(shí)支出的還有后面交換對(duì)象時(shí)的時(shí)間和資源開銷。因此,對(duì)異常免疫的較強(qiáng)保證是很好很強(qiáng)大,但是實(shí)際中并不是任何時(shí)候都需要做到那么高的保證。殺雞豈需用牛刀?

            最后要提醒的是,對(duì)異常免疫的函數(shù)也符合“短板理論”:木桶能裝的水與其最短的那塊木板有關(guān),函數(shù)對(duì)異常免疫的程度也由函數(shù)中程度最低的代碼(包括其調(diào)用的函數(shù))決定。某個(gè)函數(shù)如果調(diào)用了另外一個(gè)一出現(xiàn)異常就崩潰的函數(shù),那么這個(gè)函數(shù)就不能提供基本的異常免疫保證。

            posted on 2010-01-27 08:43 Justin.H 閱讀(343) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Effective C++ 炒冷飯
            狠狠色丁香久久婷婷综| 久久精品国产免费观看三人同眠| 国产午夜精品理论片久久影视| 国产精品久久久久久福利69堂| 老司机国内精品久久久久| 狠狠精品干练久久久无码中文字幕| 欧美激情精品久久久久久| 久久这里只有精品18| 国产99久久久久久免费看| 久久精品国产亚洲AV久| 精品国产乱码久久久久久浪潮| 99久久精品免费看国产一区二区三区 | 久久av高潮av无码av喷吹| 久久受www免费人成_看片中文| 99re久久精品国产首页2020| 中文精品久久久久人妻| 久久精品国产72国产精福利| 国产亚洲精品美女久久久| 国产一区二区久久久| 久久露脸国产精品| 久久久国产精品网站| 日韩久久久久久中文人妻| 精品伊人久久久| 久久久久久久综合综合狠狠| 久久亚洲国产精品一区二区| 久久国产高潮流白浆免费观看| 人人狠狠综合久久亚洲高清| 大香网伊人久久综合网2020| 国产精品99精品久久免费| 久久久www免费人成精品| 伊人久久大香线蕉综合热线| 久久久久久国产精品无码下载| 777久久精品一区二区三区无码| 国产91色综合久久免费| 久久精品中文闷骚内射| 久久久无码精品亚洲日韩蜜臀浪潮| 久久精品国产99久久久古代| 久久SE精品一区二区| 色欲综合久久中文字幕网| 久久中文骚妇内射| 精品永久久福利一区二区|