青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

flushthink

just for essential skill
隨筆 - 14, 文章 - 0, 評論 - 30, 引用 - 0
數據加載中……

enable_shared_from_this、weak_ptr、shared_ptr

網上說weak_ptr是shared_ptr的觀察員,weak_ptr不會干擾shared_ptr機制,當weak_ptr所觀察的shared_ptr要釋放對象時,weak_ptr的指針將被置空,避免空懸指針。
weak_ptr只能通過shared_ptr或weak_ptr構造。

對于一個shared_ptr,它分別對強引用和弱引用都做了計數。

上圖是下面代碼的調試信息。
#include "stdafx.h"
#include 
<iostream>
#include 
<boost/shared_ptr.hpp>
#include 
<boost/weak_ptr.hpp>
#include 
<boost/enable_shared_from_this.hpp>

struct A
{};

int _tmain(int argc, _TCHAR* argv[])
{
    boost::shared_ptr
<A> a(new A);

    
return 0;
}

當一個shared_ptr構造,use_count_和weak_count_都被賦值為1。



上圖是下面代碼調試信息。
#include "stdafx.h"
#include 
<iostream>
#include 
<boost/shared_ptr.hpp>
#include 
<boost/weak_ptr.hpp>
#include 
<boost/enable_shared_from_this.hpp>

struct A
{};

class B 
{
public:
    B()
        : mA(
new A)
    
{
    }


    
/// 把指針返回出去
    boost::shared_ptr<A> get()
    
{
        
return mA;
    }

private:
    boost::shared_ptr
<A> mA;
}
;

int _tmain(int argc, _TCHAR* argv[])
{
    
{
        B b;
        boost::weak_ptr
<A> wp1 = b.get();
        boost::weak_ptr
<A> wp2 = b.get();
        boost::shared_ptr
<A> sp1 = b.get();
        boost::shared_ptr
<A> sp2 = b.get();
    }


    
return 0;
}



當一個對象返回出一個自身對象shared_ptr,一般用enable_shared_from_this,而enable_shared_from_this就是用weak_ptr來實現的。

 

#include "stdafx.h"
#include 
<iostream>
#include 
<boost/shared_ptr.hpp>
#include 
<boost/weak_ptr.hpp>
#include 
<boost/enable_shared_from_this.hpp>

struct A : public boost::enable_shared_from_this<A>
{

    boost::shared_ptr
<A> get()
    
{
        boost::shared_ptr
<A> holder(new A);
        
return holder;
    }

}
;

int _tmain(int argc, _TCHAR* argv[])
{
    
    A a;
    boost::shared_ptr
<A> aa = a.get();
    
return 0;
}

上述代碼的對象構造是:enable_shared_from_this<A>,然后是A,再就是shared_ptr,所以必須在構造完成之后再進行對象智能指針的創建。這是一種循環依賴關系,一般循環依賴都要用到weak_ptr。

針對循環依賴的shared_ptr如下:
#include "stdafx.h"
#include 
<iostream>
#include 
<boost/shared_ptr.hpp>
#include 
<boost/weak_ptr.hpp>
#include 
<boost/enable_shared_from_this.hpp>

/// 相互依賴
struct Product;
struct ProductManager;

typedef boost::shared_ptr
<Product> ProductPtr;
typedef boost::shared_ptr
<ProductManager> ProductManagerPtr;

struct Product
{
    Product()
    
{
        std::cout 
<< "Product 構造" << std::endl;
    }

    
~Product()
    
{
        std::cout 
<< "Product 析構" << std::endl;
    }

    ProductManagerPtr mMgr;
}
;

struct ProductManager
{
    ProductManager()
    
{
        std::cout 
<< "ProductManager 構造" << std::endl;
    }

    
~ProductManager()
    
{
        std::cout 
<< "ProductManager 析構" << std::endl;
    }

    ProductPtr mProduct;
}
;

int _tmain(int argc, _TCHAR* argv[])
{
    ProductPtr product(
new Product);
    ProductManagerPtr productMgr(
new ProductManager);
    product
->mMgr = productMgr;
    productMgr
->mProduct = product;
    
return 0;
}

結果是:


不能釋放對象。
對于這種情況要這么做:

struct Product
{
    Product()
    
{
        std::cout 
<< "Product 構造" << std::endl;
    }

    
~Product()
    
{
        std::cout 
<< "Product 析構" << std::endl;
    }

    boost::weak_ptr
<ProductManager> mMgr;
}
;


 

posted on 2009-09-17 15:14 tiny 閱讀(2140) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲视频大全| 久久久噜噜噜久久| 欧美视频二区| 一区二区国产精品| 日韩一级片网址| 国产精品国产馆在线真实露脸 | 欧美日韩国产另类不卡| 亚洲日本va午夜在线电影| 亚洲国产另类精品专区| 免费高清在线视频一区·| 亚洲区第一页| 亚洲免费观看高清完整版在线观看熊 | 国产精品久久久久9999高清 | 国产综合18久久久久久| 蜜桃久久精品乱码一区二区| 久久欧美中文字幕| 亚洲美女在线一区| 中文精品99久久国产香蕉| 国产一区二区三区电影在线观看| 久久综合九色综合网站| 欧美成人午夜激情在线| 亚洲欧美日韩中文视频| 久久久国产亚洲精品| 亚洲精品一区在线观看| 亚洲视频每日更新| 在线看视频不卡| 一本久道久久久| 国产在线观看精品一区二区三区| 亚洲国产国产亚洲一二三| 欧美午夜精品伦理| 老司机凹凸av亚洲导航| 欧美日韩一区高清| 欧美ab在线视频| 国产精品久久夜| 欧美黄色一级视频| 国产伦精品一区二区三区四区免费| 毛片精品免费在线观看| 国产精品国色综合久久| 亚洲电影av在线| 国产在线观看一区| 亚洲色无码播放| 亚洲精品1区2区| 亚洲综合视频网| 一本一本a久久| 久久久久国产成人精品亚洲午夜| 中日韩美女免费视频网址在线观看| 亚洲欧美国产精品专区久久| 日韩手机在线导航| 久久久九九九九| 午夜精品久久99蜜桃的功能介绍| 欧美a级理论片| 久久久在线视频| 国产三级欧美三级日产三级99| 亚洲精品美女久久久久| 一区在线观看| 久久精品国产亚洲aⅴ| 亚洲欧美日韩国产另类专区| 欧美精品亚洲精品| 欧美激情1区2区3区| 国产亚洲欧美在线| 亚洲——在线| 欧美一级片一区| 国产精品免费视频xxxx| 99国产精品视频免费观看一公开 | 欧美日韩免费一区二区三区视频 | 欧美在线视频日韩| 国产精品久久久久秋霞鲁丝| 亚洲精品久久久久久一区二区| 亚洲福利av| 久久这里只有精品视频首页| 毛片一区二区三区| 亚洲电影欧美电影有声小说| 久久久久国产精品麻豆ai换脸| 久久久久.com| 好看的av在线不卡观看| 久久er99精品| 欧美www视频在线观看| 亚洲国产日韩欧美在线动漫| 噜噜噜躁狠狠躁狠狠精品视频 | 亚洲国产成人久久综合| 亚洲激情校园春色| 欧美sm重口味系列视频在线观看| 欧美电影免费观看高清完整版| 亚洲国产欧美一区二区三区久久| 久久综合狠狠综合久久激情| 亚洲国产99精品国自产| 99热这里只有成人精品国产| 欧美日韩国产综合一区二区| 一区二区三区免费网站| 午夜精品视频| 国产亚洲一区二区三区在线观看 | 欧美三级日本三级少妇99| 制服诱惑一区二区| 久久精品国产91精品亚洲| 在线观看欧美日韩国产| 欧美激情一区二区三区高清视频| 日韩一区二区高清| 欧美怡红院视频| 亚洲娇小video精品| 欧美性开放视频| 欧美一区二区三区啪啪| 欧美大片免费久久精品三p| 亚洲免费av片| 国产日韩欧美精品| 欧美成年人网| 亚洲影视中文字幕| 欧美大片在线观看| 翔田千里一区二区| 在线观看日韩欧美| 国产精品欧美一区二区三区奶水| 久久久精品一区二区三区| 亚洲精品资源美女情侣酒店| 久久精品国产77777蜜臀| 亚洲精品视频免费| 国产一本一道久久香蕉| 欧美日韩不卡合集视频| 久久精品一区二区三区不卡牛牛 | 久久狠狠亚洲综合| 亚洲看片网站| 国产一区二区你懂的| 欧美大片专区| 久久xxxx| 这里只有精品电影| 亚洲精品少妇30p| 久热精品视频在线免费观看 | 一区二区亚洲精品国产| 国产精品久久激情| 欧美国产日韩免费| 欧美一区网站| 一区二区三区高清视频在线观看| 欧美va亚洲va香蕉在线| 久久岛国电影| 午夜精品美女久久久久av福利| 91久久久久久久久久久久久| 国产一区二区欧美| 国产日韩欧美黄色| 国产精品人人爽人人做我的可爱 | 男人的天堂成人在线| 午夜精品久久久久久| 一区二区免费在线播放| 亚洲欧洲一级| 亚洲国产欧美精品| 亚洲大胆av| 欧美国产日韩xxxxx| 另类av一区二区| 久久综合九色| 久久人人九九| 久久久久久9| 久久人人精品| 久久综合网络一区二区| 久久久久久午夜| 久久久亚洲欧洲日产国码αv| 午夜视频在线观看一区二区三区 | 亚洲大片av| 亚洲电影免费观看高清| 在线观看欧美精品| 亚洲九九九在线观看| 99国产精品久久久久老师| 日韩一区二区精品视频| 99精品国产99久久久久久福利| 日韩一区二区精品葵司在线| 99热这里只有成人精品国产| 亚洲一区在线视频| 亚洲女爱视频在线| 久久se精品一区二区| 久久激情一区| 欧美黄色片免费观看| 亚洲精品网站在线播放gif| 一区二区三区欧美视频| 亚洲欧美国产精品桃花| 久久久免费精品视频| 欧美大片在线看| 国产精品国产a| 国产曰批免费观看久久久| 亚洲国产欧美国产综合一区 | 国产视频欧美| 亚洲福利久久| 一区二区三区免费网站| 欧美一区二区在线观看| 免费的成人av| a91a精品视频在线观看| 欧美亚洲三区| 欧美激情一区二区三区在线视频观看 | 欧美不卡激情三级在线观看| 日韩视频在线一区二区| 欧美一二三区在线观看| 男女激情久久| 国产欧美丝祙| 亚洲欧洲中文日韩久久av乱码| 亚洲一区亚洲二区| 美女在线一区二区| 99av国产精品欲麻豆| 久久先锋资源| 国产精品午夜电影| 亚洲伦理在线观看| 久久久久久精| 一区二区三区四区国产精品| 久久婷婷国产综合精品青草| 国产精品丝袜xxxxxxx| 亚洲精品免费网站|