• <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>
            春暖花開
            雪化了,花開了,春天來了
            posts - 149,comments - 125,trackbacks - 0
            摘自: http://www.shnenglu.com/yearner/archive/2008/11/09/66447.html

            對于智能指針,也只是聽說而已,對深層的東西也不甚了解。昨日又重聽這一字眼,想想多少也該了解一些。

            淺談C++的智能指針

                    內存泄露是C++程序員都頭疼的大問題。C++缺乏像JAVA、C#一樣,擁有GC這么一項有利的武器,它將內存管理的部分權限交給了程序員。雖然GC的存在節約了開發、排錯的時間與成本,但是C++為了追求運行速度而20年來堅決不予補充進其標準。(題外話:C++通過加大開發難度去換取執行速度的做法,在現在看來不知是否能給與正面的評價,還是留給將來再說吧。)

                   從此,在堆上申請了內存忘了釋放、所造成的內存泄露的問題就一直困擾著C++程序員。也許為了稍許彌補沒有垃圾回收器所造成的開發門檻高,各大廠商開發的C++庫中都像COM學習引入智能指針試圖解決部分目前存在的問題。

                   智能指針是存儲指向動態分配(堆)對象指針的類, 用于生存期控制, 能夠確保自動正確的銷毀動態分配的對象,防止內存泄露。它的一種通用實現技術是使用引用計數(reference count)。智能指針類將一個計數器與類指向的對象相關聯,引用計數跟蹤該類有多少個對象共享同一指針。每次創建類的新對象時,初始化指針并將引用計數置為1;當對象作為另一對象的副本而創建時,拷貝構造函數拷貝指針并增加與之相應的引用計數;對一個對象進行賦值時,賦值操作符減少左操作數所指對象的引用計數(如果引用計數為減至0,則刪除對象),并增加右操作數所指對象的引用計數;調用析構函數時,構造函數減少引用計數(如果引用計數減至0,則刪除基礎對象)。

                    說到智能指針,我們一定要看看標準C++庫提供的“搞笑的”智能指針:auto_ptr。

                   標準庫中提供了C++程序的基本設施。雖然C++標準庫隨著C++標準折騰了許多年,直到標準的出臺才正式定型,網上評論C++標準庫時都說:“在標準庫的實現上卻很令人欣慰得看到多種實現,并且已被實踐證明為有工業級別強度的佳作。”但目前的標準C++中,只有一種獨苗智能指針:std::auto_ptr。

                    auto_ptr指針是一個RAII對象,它初始化時獲得資源,析構時自動釋放資源(生命期結束).它的缺點數不勝數:
            1、auto_ptr要求一個對象只能有一個擁有者,嚴禁一物二主
            2、缺少對引用數和數組的支持。
            3、不可將auto_ptr對象作為STL容器的元素。C++標準明確禁止這樣做,否則可能會碰到不可預見的結果。(這一條暈死一大片)。
            4、auto_ptr在被復制的時候會傳輸所有權

                    反正由此可見:標準庫的智能指針就是無甚大用。

                   在這樣的情況下,C++標準委員會自然需要考慮引入新的智能指針。目前由C++標準委員會庫工作組發起的Boost 組織開發了Boost系列智能指針。

                    在Boost中的智能指針有五種: scoped_ptr,scoped_array,shared_ptr,shared_array,weak_ptr.

                    前4種完全是針對標準庫中的auto_ptr提出解決方案,如:scope_ptr是針對“auto_ptr在被復制的時候會傳輸所有權”這一弱點提出的。最后一種沒見過,看名字像是弱引用智能指針,我懷疑是不是類似于JAVA中弱引用一樣,有待進一步學習。

                    還查到一篇:
             
                   C++深度探索系列:智能指針(Smart Pointer) [一] 
                    http://dev.csdn.net/develop/article/17/17530.shtm

                    有空可以看看!


            posted on 2009-06-18 10:47 Sandy 閱讀(379) 評論(0)  編輯 收藏 引用 所屬分類: c++學習
            久久综合亚洲欧美成人| 久久久久亚洲AV无码专区网站| 久久婷婷五月综合97色直播| 亚洲精品乱码久久久久久蜜桃 | 免费久久人人爽人人爽av| 久久婷婷五月综合国产尤物app| 亚洲日本va中文字幕久久| 久久99国产精品99久久| 久久夜色精品国产www| 国内精品久久久久影院日本| 91麻精品国产91久久久久| 伊人久久大香线蕉综合Av| 99久久精品久久久久久清纯| 中文无码久久精品| 久久综合色区| 久久亚洲欧美日本精品| 性做久久久久久久| 天天影视色香欲综合久久| 久久精品国产精品国产精品污| 欧美亚洲国产精品久久| 精品国产热久久久福利| 国产精品久久一区二区三区| 久久久久久久波多野结衣高潮 | 久久涩综合| 久久精品无码一区二区三区| 国产毛片欧美毛片久久久| 欧美久久一区二区三区| 99久久精品免费国产大片| 国产精品久久成人影院| 久久午夜伦鲁片免费无码| 久久国产劲爆AV内射—百度| 亚洲国产视频久久| 亚洲精品NV久久久久久久久久| 色综合久久88色综合天天| 久久福利青草精品资源站| 久久精品麻豆日日躁夜夜躁| 无码人妻精品一区二区三区久久 | 香蕉久久永久视频| 久久久久国色AV免费看图片| 国产精品99久久久久久人| 国产成人精品久久二区二区|