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

            martin

            thinking

            常用鏈接

            統(tǒng)計

            software

            最新評論

            C++中的智能指針

            1.淺論C++中的智能指針(Smart Pointer)
            簡單地講,智能指針是用一個對象來對指針進(jìn)行建模,使之具有指針的特性,跟指針具有相同含義的->,*操作.并且通過對象的構(gòu)造函數(shù)(獲取資源),析構(gòu)資源(釋放資源)來對資源進(jìn)行管理,從而減少程序員對通過new操作獲取到的對象的生命周期進(jìn)行管理的負(fù)擔(dān).
            根據(jù)《Moden C++ Design》, 我們可以構(gòu)造具有很多正交特性的智能指針。
            1.1  C++中的智能指針與JAVA中的對象
            前段時間跟朋友聊了些有關(guān)JAVA的東西,感覺上Java中的對象就是C++中的智能指針,但具有不同的資源釋放方式。在JAVA中,不能象C++中運用" A a;"語句聲明得到一個類(A)的事例a,而必須通過下列語句來獲得:Aa = new A.要在釋放a時,應(yīng)用必需通知
            GC(垃圾收集功能)來釋放該實例所占用的資源。當(dāng)然,JAVA中的對象有一小點同C++中的職能智能不同,因為在C++中指針不具有"."操作符,故智能指針一般也不提供"."操作符,但在Java中都是通過"."操作符對對象進(jìn)行操作的,不過我們可以把C++中職能指針的"->"操作符與
            Java中的"."操作符進(jìn)行類比。
            1.2  引用計數(shù)型智能指針
            在C++中有一種常用的智能指針是引用計數(shù)型智能指針:RCSmartPtr. 它的實現(xiàn)基理如下:
            首先,存在RCObject,即存在一個對象,該對象提供引用計數(shù)接口。
            另外,要存在指向RCObject的RCSmartPtr對象,在RCSmartPtr對象的構(gòu)造過程中,把指向RCObject的指針作為參數(shù)傳入RCSmartPtr中。因此每增加一個RCSmartPtr對象,就多了一個指向RCObject的指針。RCSmartPtr可以通過調(diào)用RCObject的引用計數(shù)接口,增加RCObject
            的引用計數(shù)。同樣的道理可以在RCSmartPtr對象的析構(gòu)函數(shù)中調(diào)用RCObject的引用記數(shù)接口來減少RCObject的引用記數(shù)。
            第三,在對RCObject的引用計數(shù)進(jìn)行操作時對引用計數(shù)進(jìn)行檢查,如果引用計數(shù)為0,則RCObject將摧毀本身,從而釋放該對象所占用的資源。
            通過這種方式,我們就可以把對資源的管理交給機(jī)器來管理,解除了對人工的倚賴。
             

            posted on 2009-03-03 15:00 martin_yahoo 閱讀(4185) 評論(5)  編輯 收藏 引用

            評論

            # re: C++中的智能指針 2009-03-03 16:08 abettor

            說實話,如果沒有真正用過智能指針的人來讀博主的文章,可能會摸不到頭。要是給出點具體的例子(如代碼)就好了。  回復(fù)  更多評論   

            # re: C++中的智能指針 2009-03-03 18:37 路人乙

            "感覺上Java中的對象就是C++中的智能指針",你這個感覺差得太遠(yuǎn)了,完全不是一個東西,不是一個機(jī)制,完全沒有可比性,居然被安上“就是”。后面還言之鑿鑿的比較起兩個各有什么操作符來,完全是在誤人子弟!  回復(fù)  更多評論   

            # re: C++中的智能指針 2009-03-03 18:47 陳梓瀚(vczh)

            智能指針使用引用計數(shù),如果一不小心循環(huán)了(譬如將雙向鏈表中的兩個指針都用智能指針代替),就完蛋了。  回復(fù)  更多評論   

            # re: C++中的智能指針[未登錄] 2009-03-09 15:14 martin_yahoo

            @陳梓瀚(vczh)
            class T; //雙向鏈表的節(jié)點類
            class T_var;  //為指向?qū)ο骉的智能指針類.
            class T_list; //雙向鏈表數(shù)據(jù)結(jié)構(gòu)類
            假設(shè)class T為雙向鏈表上的節(jié)點,故它的定義可以簡單地用如下方式表示:

            calss T{
            ....
            private:
            T_var beforePtr;
            T_var nextPtr;
            };

            現(xiàn)在考慮三個節(jié)點:N ,N1,N2節(jié)點.
            N節(jié)點的nextPtr指向N1, beforePtr指向其它節(jié)點
            (如果N節(jié)點前面沒有其它節(jié)點,此時只有N1節(jié)點引用它,則它的引用計數(shù)為1;如果前面還有還有其它節(jié)點,則它的引用計數(shù)為2).

            N1節(jié)點的nextPtr指向N2, beforePtr指向N節(jié)點.
            (N1節(jié)點的引用計數(shù)為2).

            N2節(jié)點的nextPtr指向其它節(jié)點, beforePtr指向N1節(jié)點.
            (如果N節(jié)點后面沒有其它節(jié)點,此時只有N1節(jié)點引用它,則它的引用計數(shù)為1;如果后面還有還有其它節(jié)點,則它的引用計數(shù)為2).

            現(xiàn)在假設(shè)要刪除N1節(jié)點, 把N2節(jié)點中的beforePtr指向N,
            則N節(jié)點的引用計數(shù)增加一,N1節(jié)點的引用計數(shù)減少1,變成1.
            把N節(jié)點的nextPtr指向N2節(jié)點,則N2的引用計數(shù)增加一,N1節(jié)點的引用計數(shù)減少1,從而N1節(jié)點的引用計數(shù)被降到0,N1節(jié)點將被自動摧毀.

            此時,N,N2節(jié)點的引用計數(shù)將各自減一.維持與N節(jié)點存在是一致.這種情況下沒完蛋.

            考慮到在類T_list中包含有雙向鏈表的首,尾地址.因此在一般情況下,各節(jié)點的引用計數(shù)都為2.

            因此,對于首,尾節(jié)點的操作與N1節(jié)點一致.
              回復(fù)  更多評論   

            # re: C++中的智能指針[未登錄] 2009-03-09 16:19 martin_yahoo

            @abettor
            你可以參閱:
            智能指針的代碼實例   回復(fù)  更多評論   


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            欧美伊香蕉久久综合类网站| 久久99精品国产99久久6男男| 久久久久亚洲AV综合波多野结衣 | 久久国产成人午夜aⅴ影院| 97久久精品无码一区二区天美| 久久精品视频网| 一本久久精品一区二区| 麻豆一区二区99久久久久| 2022年国产精品久久久久| 久久亚洲欧洲国产综合| 亚洲国产精品无码成人片久久| 狠狠色丁香婷婷久久综合不卡| 久久不见久久见免费影院www日本| 漂亮人妻被中出中文字幕久久 | 国产精品9999久久久久| 久久久WWW成人免费精品| 浪潮AV色综合久久天堂| 久久久久久极精品久久久| 久久成人国产精品| 亚洲欧洲精品成人久久曰影片| 久久婷婷五月综合97色| 欧美亚洲另类久久综合婷婷| 久久精品国产免费一区| 东方aⅴ免费观看久久av| 精品水蜜桃久久久久久久| 久久99热国产这有精品| 久久99国产综合精品免费| 亚洲精品美女久久久久99| 欧美精品福利视频一区二区三区久久久精品 | 日本免费久久久久久久网站| 亚洲AV无码一区东京热久久 | 老男人久久青草av高清| 久久99久久无码毛片一区二区| 国产精品久久久久无码av| 久久99精品久久只有精品| 中文字幕日本人妻久久久免费| 伊人久久精品影院| 性高朝久久久久久久久久| 亚洲&#228;v永久无码精品天堂久久| 国产2021久久精品| 国产精品欧美亚洲韩国日本久久 |