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

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>
            欧美国产日产韩国视频| 国产精品99久久久久久久久久久久 | 欧美三级精品| 亚洲在线观看视频| 亚洲欧美日韩国产综合在线| 国产精品亚洲片夜色在线| 欧美一区二区三区四区在线观看地址| 亚洲一区二区三区视频播放| 国产亚洲精品bt天堂精选| 久久亚洲精品一区二区| 欧美69视频| 亚洲欧美日韩一区二区三区在线观看 | 一区二区高清视频在线观看| 国产精品一卡二| 毛片一区二区三区| 欧美另类久久久品| 欧美影院成年免费版| 久久免费精品日本久久中文字幕| 亚洲黑丝在线| 亚洲视频在线一区| 亚洲高清中文字幕| 亚洲视频axxx| 亚洲国产欧美一区二区三区久久| 99视频在线精品国自产拍免费观看| 国产日韩视频| 亚洲精品国精品久久99热一| 国产精品日韩欧美一区二区| 欧美激情国产日韩精品一区18| 欧美国产视频日韩| 久久久久se| 欧美四级在线观看| 欧美激情中文字幕一区二区 | 玖玖国产精品视频| 亚洲欧美精品在线观看| 久久视频精品在线| 久久国产一区二区三区| 欧美日本成人| 欧美国产激情二区三区| 国产有码在线一区二区视频| 亚洲精品美女在线观看| 在线日韩中文| 亚欧成人在线| 亚洲综合视频一区| 欧美成人网在线| 麻豆成人精品| 国内精品久久久久久影视8| 中日韩高清电影网| av成人毛片| 欧美福利一区| 欧美激情视频一区二区三区不卡| 国产一区二区三区免费观看| 亚洲一区久久久| 亚洲一区二区动漫| 欧美日韩视频在线一区二区观看视频| 蘑菇福利视频一区播放| 韩国美女久久| 久久久精品国产免费观看同学| 香蕉乱码成人久久天堂爱免费 | 国产精品另类一区| 99国产精品久久久久老师| 亚洲国产一区在线| 免费在线一区二区| 欧美激情精品久久久六区热门| 国产一区清纯| 久久亚洲私人国产精品va| 可以看av的网站久久看| 永久555www成人免费| 久久久久久久一区| 欧美www视频在线观看| 1769国产精品| 欧美韩国日本一区| 日韩午夜激情av| 中文国产亚洲喷潮| 国产精品日韩一区二区| 亚洲欧美一级二级三级| 久久精品视频导航| 一区福利视频| 欧美.www| 一本久道久久综合狠狠爱| 亚洲制服丝袜在线| 国产欧美日韩在线| 久久亚洲精品视频| 亚洲毛片播放| 欧美一区二区三区的| 激情综合久久| 欧美日本高清| 亚洲欧美韩国| 欧美99在线视频观看| 日韩午夜在线视频| 国产精品专区h在线观看| 久久精品成人| 亚洲伦伦在线| 久久久久久一区二区三区| 最新国产成人av网站网址麻豆| 欧美日韩视频在线一区二区观看视频| 亚洲视频大全| 欧美激情精品久久久久久久变态| 一区二区高清在线观看| 国产亚洲综合性久久久影院| 免费观看日韩av| 亚洲女女女同性video| 欧美不卡一区| 欧美在线视频免费| 99人久久精品视频最新地址| 国产亚洲精品aa| 欧美日韩 国产精品| 久久狠狠亚洲综合| 一本不卡影院| 亚洲高清不卡在线观看| 久久av在线| 在线亚洲+欧美+日本专区| 激情五月***国产精品| 国产精品狠色婷| 农村妇女精品| 欧美一区二区三区在线| 日韩视频中文| 亚洲高清视频在线观看| 久久久国产一区二区| 亚洲性人人天天夜夜摸| 亚洲精品乱码久久久久| 国内精品久久久久久影视8| 国产精品久久久久影院亚瑟| 欧美电影在线观看完整版| 久久久久国产精品午夜一区| 亚洲综合丁香| 亚洲午夜羞羞片| av成人国产| 日韩视频亚洲视频| 亚洲肉体裸体xxxx137| 欧美激情久久久久久| 久久综合九色欧美综合狠狠| 久久电影一区| 久久高清国产| 欧美一级在线播放| 欧美一区2区三区4区公司二百| 亚洲天堂黄色| 亚洲在线观看视频| 亚洲欧美国产精品va在线观看| 一区二区三区四区五区在线| 99re热精品| 一本久久知道综合久久| 一区二区高清在线观看| 日韩视频久久| 一区二区日韩免费看| 一级成人国产| 亚洲在线视频网站| 午夜日韩在线| 久久久久久久尹人综合网亚洲| 欧美一区二区私人影院日本 | 亚洲精品日韩欧美| 亚洲欧洲一区二区天堂久久 | 国产精品午夜久久| 国产精品一区二区男女羞羞无遮挡| 国产精品久久久久秋霞鲁丝| 国产欧美精品xxxx另类| 激情久久久久久久| 亚洲黄色天堂| 亚洲视频在线观看免费| 翔田千里一区二区| 久久先锋影音av| 亚洲国产成人午夜在线一区| 91久久国产综合久久91精品网站| 亚洲美女啪啪| 午夜精品三级视频福利| 久久久亚洲国产天美传媒修理工| 欧美 日韩 国产一区二区在线视频| 欧美精品大片| 国产免费成人av| 亚洲国产老妈| 亚洲资源av| 欧美va亚洲va香蕉在线| 亚洲精品中文在线| 亚洲欧美日韩国产中文在线| 久久中文久久字幕| 国产精品高清在线| 伊甸园精品99久久久久久| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 欧美高清免费| 亚洲桃花岛网站| 美女精品在线| 国产精品网站在线观看| 亚洲国内精品| 欧美一区二区三区免费看| 欧美激情亚洲| 欧美在线看片a免费观看| 欧美极品aⅴ影院| 韩日精品中文字幕| 亚洲欧美日韩国产综合| 欧美激情第三页| 久久国产99| 国产精品乱人伦一区二区| 亚洲精品久久久久久久久久久久| 欧美一区二区大片| 亚洲精品视频在线看| 久久精品一本| 国产日韩欧美综合在线| 中国日韩欧美久久久久久久久| 男男成人高潮片免费网站| 午夜久久久久| 国产精品亚洲欧美|