C++動(dòng)態(tài)內(nèi)存與智能指針

智能指針

智能指針的類型

  1. shared_ptr
    實(shí)現(xiàn)共享式擁有的概念(shared ownership)嘶居。多個(gè)智能指針指向相同的對(duì)象厚者,該對(duì)象只有在最后一個(gè)引用被銷毀后釋放躁劣。
  2. weak_ptr
    允許共享但是不擁有對(duì)象。一旦最后一個(gè)擁有該對(duì)象的智能指針銷毀后库菲,任何的weak_ptr會(huì)自動(dòng)置為空账忘。在default和copy 構(gòu)造函數(shù)之外 ,weak_ptr 只提供 “接受一個(gè) shared_ptr” 的構(gòu)造函數(shù)。
  3. unique_ptr
    是 C++11 才開始提供的類型鳖擒,是一種在異常時(shí)可以幫助避免資源泄漏的智能指針溉浙。采用獨(dú)占式擁有,某個(gè)時(shí)刻只能有一個(gè)unique_ptr指向給定的對(duì)象蒋荚。當(dāng)unique_ptr被銷毀時(shí)戳稽,它所指向的對(duì)象也被銷毀。
  4. auto_ptr
    被 c++11 棄用期升,原因是缺乏語言特性如 “針對(duì)構(gòu)造和賦值” 的 std::move 語義惊奇,以及其他瑕疵。

auto_ptr 與 unique_ptr 比較

  • auto_ptr 可以賦值拷貝播赁,復(fù)制拷貝后所有權(quán)轉(zhuǎn)移赊时;unqiue_ptr無拷貝賦值語義,但實(shí)現(xiàn)了move語義行拢;
  • auto_ptr 對(duì)象不能管理數(shù)組(析構(gòu)調(diào)用 delete)祖秒,unique_ptr可以管理數(shù)組(析構(gòu)調(diào)用delete[]);

shared_ptr代碼簡(jiǎn)單實(shí)現(xiàn)

template <class T> class share_ptr {
  private:
    class Storage {
      private:
        int count;

      public:
        T *pObj;
        Storage(T *pObject) {
            pObj = pObject;
            count = 1;
        }
        ~Storage() {
            if (pObj)
                delete pObj;
        }
        void addRef() { count++; }
        void remRef() { count--; }
        bool noRefs() { return (count == 0); }
    };
    Storage *storage;

  public:
    share_ptr(T *pObject) { storage = new Storage(pObject); }
    shared_ptr(const shared_ptr &p) {
        storage = p.storage;
        storage->addRef();
    }
    ~share_ptr() {
        storage->remRef();
        if (storage->noRefs()) {
            delete storage;
        }
    }
    share_ptr &operator=(const share_ptr &p) {
        if (this != &p) {
            storage->remRef();
            if (storage->noRefs()) {
                delete storage;
            }
            storage = p.storage;
            storage->addRef();
        }
    }
    T *operator->() { return storage->pObj; }
    T &operator*() { return *(storage->pObj); }
};

參考資料

https://github.com/shrddr/Smartpointers/blob/master/shared_ptr.h

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末舟奠,一起剝皮案震驚了整個(gè)濱河市竭缝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沼瘫,老刑警劉巖抬纸,帶你破解...
    沈念sama閱讀 222,865評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異耿戚,居然都是意外死亡湿故,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門膜蛔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坛猪,“玉大人,你說我怎么就攤上這事皂股∈裕” “怎么了?”我有些...
    開封第一講書人閱讀 169,631評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵呜呐,是天一觀的道長(zhǎng)就斤。 經(jīng)常有香客問我,道長(zhǎng)蘑辑,這世上最難降的妖魔是什么洋机? 我笑而不...
    開封第一講書人閱讀 60,199評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮洋魂,結(jié)果婚禮上绷旗,老公的妹妹穿的比我還像新娘啄踊。我一直安慰自己,他們只是感情好刁标,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評(píng)論 6 398
  • 文/花漫 我一把揭開白布颠通。 她就那樣靜靜地躺著,像睡著了一般膀懈。 火紅的嫁衣襯著肌膚如雪顿锰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,793評(píng)論 1 314
  • 那天启搂,我揣著相機(jī)與錄音硼控,去河邊找鬼。 笑死胳赌,一個(gè)胖子當(dāng)著我的面吹牛牢撼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播疑苫,決...
    沈念sama閱讀 41,221評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼熏版,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了捍掺?” 一聲冷哼從身側(cè)響起撼短,我...
    開封第一講書人閱讀 40,174評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挺勿,沒想到半個(gè)月后曲横,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,699評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡不瓶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評(píng)論 3 343
  • 正文 我和宋清朗相戀三年禾嫉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚊丐。...
    茶點(diǎn)故事閱讀 40,918評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡熙参,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吠撮,到底是詐尸還是另有隱情尊惰,我是刑警寧澤讲竿,帶...
    沈念sama閱讀 36,573評(píng)論 5 351
  • 正文 年R本政府宣布泥兰,位于F島的核電站,受9級(jí)特大地震影響题禀,放射性物質(zhì)發(fā)生泄漏鞋诗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評(píng)論 3 336
  • 文/蒙蒙 一迈嘹、第九天 我趴在偏房一處隱蔽的房頂上張望削彬。 院中可真熱鬧全庸,春花似錦、人聲如沸融痛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雁刷。三九已至覆劈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沛励,已是汗流浹背责语。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留目派,地道東北人坤候。 一個(gè)月前我還...
    沈念sama閱讀 49,364評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像企蹭,于是被迫代替她去往敵國(guó)和親白筹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評(píng)論 2 361