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

            搜索

            •  

            積分與排名

            • 積分 - 52712
            • 排名 - 433

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

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


            到了七七四九章,大師已經(jīng)帶領(lǐng)我們走進(jìn)了全書的第八部分:定制new和delete。往往只有掌握了程序背后的內(nèi)存管理機(jī)制,才能真正做到對(duì)程序的控制。上課上到這里,恭喜你慢慢在進(jìn)步了。

            Item49要講的是當(dāng)new失敗時(shí),負(fù)責(zé)異常處理的new handler程序。大師說一個(gè)合格的new handler應(yīng)該具備下面的特征:
            - 可以“擠”出更多的可用內(nèi)存。本來喊你來就是因?yàn)闆]有內(nèi)存可以用,這個(gè)算是個(gè)最基本的要求了。
            - 當(dāng)無法安排出更多可用內(nèi)存時(shí),要有下一步的解決方案。比如說找另外一個(gè)人來幫忙(通過set_new_handler來設(shè)置調(diào)用另一個(gè)new handler),或是變身為超人(通過改變函數(shù)自身的行為來進(jìn)一步分配可用內(nèi)存,說穿了就是類似下面的處理過程,當(dāng)然實(shí)際并沒有那么簡單)
            if?(!?failed)
            {
            ???
            //do?the?normal?new?exception?handling
            ???if?(?cannot_make_more_memory_available?)
            ??????failed?
            =?1;
            }?
            else?{
            ???
            //do?another?way?around?to?get?more?memory
            }

            - 應(yīng)該可以“卸載”new handler。也就是說可以禁止對(duì)new失敗時(shí)進(jìn)行任何處理,或者說是關(guān)掉new handler,此時(shí)new的失敗會(huì)直接拋出異常。
            - 應(yīng)該在無法安排更多可用內(nèi)存時(shí)拋出bad_alloc或類似的異常,以讓申請(qǐng)內(nèi)存的家伙知道這次沒有面包吃了。
            - 不會(huì)返回,一般而言,意味著該函數(shù)應(yīng)該以abort或是exit自我了斷。

            在C++中可以專門為某個(gè)類實(shí)現(xiàn)其專屬的new handler,只要正確利用set_new_handler()就可以了。

            接下來大師寫了一個(gè)通用的模板類,幫助另外一個(gè)類實(shí)現(xiàn)安裝/卸載特定的new handler。它的設(shè)計(jì)很簡單,在調(diào)用new之前安裝指定的new handler,調(diào)用結(jié)束后卸載并恢復(fù)原先的全局handler。安裝new handler的函數(shù)、重載的new函數(shù)以及用于暫時(shí)保存new handler的函數(shù)指針都是靜態(tài)的(static),這樣做的目的是可以基于模板類的每個(gè)模板參數(shù)生成一套專屬的實(shí)例。例子在書上,就不畫蛇添足了。
            posted on 2010-05-26 04:20 Justin.H 閱讀(567) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Effective C++ 炒冷飯
            国产香蕉97碰碰久久人人| 久久精品国产色蜜蜜麻豆| 亚洲AV成人无码久久精品老人| 99久久无色码中文字幕人妻| 久久精品国产亚洲AV麻豆网站| 久久久久久久尹人综合网亚洲| 久久播电影网| 99久久国产热无码精品免费| 久久伊人中文无码| 曰曰摸天天摸人人看久久久| 亚洲愉拍99热成人精品热久久| 精品多毛少妇人妻AV免费久久| 久久综合狠狠综合久久| 久久综合久久综合亚洲| 国产成人精品久久亚洲| 国产美女亚洲精品久久久综合| 97久久精品国产精品青草| 伊人久久大香线蕉av不变影院 | 国产精品免费久久| av午夜福利一片免费看久久| 亚洲国产精品无码久久久不卡 | 国产高潮国产高潮久久久91| 亚洲精品乱码久久久久久蜜桃图片| 久久人人爽人人爽人人片AV东京热 | 午夜精品久久久久久99热| 思思久久好好热精品国产| 久久伊人影视| 91麻豆国产精品91久久久| 伊人热热久久原色播放www | 亚洲国产天堂久久久久久| 久久精品无码av| 亚洲国产精品成人AV无码久久综合影院| 91久久精品无码一区二区毛片| 久久精品免费观看| 久久这里只有精品久久| 国产高潮国产高潮久久久91| 久久国产成人精品国产成人亚洲| 99久久夜色精品国产网站| 国内精品久久久久久久coent| 国产三级观看久久| 无码国内精品久久人妻麻豆按摩 |