久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C 11 shared_ptr概念及用法

 印度阿三17 2020-11-23

基本概念

  • shared_ptr 是C 11提供的一種智能指針類,,主要用于消除內(nèi)存泄漏和懸空指針的問題,方便資源的管理,,自動釋放沒有指針引用的資源.

  • shared_ptr的大小是原始指針的兩倍,,因為它的內(nèi)部有一個原始指針指向資源,同時有個指針指向引用計數(shù).

所在庫

C 11模板庫

#include <memory>
shared_ptr<T> ptr(new T);  // T 可以是 int,、char,、類等各種類型

GNU G 的標準庫中還沒有支持,需使用boost

#include <boost/shared_ptr.hpp>

內(nèi)存

每個 shared_ptr 對象在內(nèi)部指向兩個內(nèi)存位置

  • 指向?qū)ο蟮闹羔?/p>

  • 用于控制引用計數(shù)數(shù)據(jù)的指針

計數(shù)變化規(guī)則

  • 當新的 shared_ptr 對象與指針關(guān)聯(lián)時,,則在其構(gòu)造函數(shù)中,,將與此指針關(guān)聯(lián)的引用計數(shù)增加1。

  • 當任何 shared_ptr 對象超出作用域時,,則在其析構(gòu)函數(shù)中,,它將關(guān)聯(lián)指針的引用計數(shù)減1。如果引用計數(shù)變?yōu)?,,則表示沒有其他 shared_ptr 對象與此內(nèi)存關(guān)聯(lián),,在這種情況下,它使用delete函數(shù)刪除該內(nèi)存

  • 引用計數(shù)加一/減一操作是原子性的,,所以線程安全的
    使用以下方法可檢查 shared_ptr 對象的引用計數(shù)

ptr.use_count();

構(gòu)造方法

(1)使用空參數(shù)構(gòu)造函數(shù)構(gòu)造

std::shared_ptr<T> ptr;

這樣構(gòu)造的話,,ptr 的意義就相當于一個 NULL 指針,。當試圖在一個空指針上做類似于 *ptr 或者 ptr->xx 之類的東西的時候,會出現(xiàn)異常錯誤
(2)直接從 new 操作符的返回值構(gòu)造

std::shared_ptr<T> ptr(new T()); //引用計數(shù)加 1

(3) 使用make_shared方法

std::shared_ptr<T> p1=std::make_shared<T> (); //引用計數(shù)加 1

(4)復制構(gòu)造函數(shù)

std::shared_ptr<T> ptr2(ptr1);    // 這就是使用復制構(gòu)造函數(shù)的方法,,引用計數(shù)加 1

shared_ptr 可以當作函數(shù)的參數(shù)傳遞,,或者當作函數(shù)的返回值返回,這個時候其實也相當于使用復制構(gòu)造函數(shù),。
過程如下:作函數(shù)實參時,,將指針執(zhí)行復制構(gòu)造函數(shù)傳入函數(shù)體內(nèi),因此該內(nèi)存塊的引用計數(shù) 1,;
當作為函數(shù)返回值時,,復制構(gòu)造函數(shù)將內(nèi)存地址傳遞給新指針,引用計數(shù) 1,,然后,,局部指針執(zhí)行析構(gòu),引用計數(shù)-1,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多