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

posts - 18,  comments - 104,  trackbacks - 0

相信 xxx_cast 系列都很熟了。

static_cast, dynamic_cast, const_cast, reinterpret_cast.

但是當(dāng)面對boost::shared_ptr的時候呢?

reinterpret_cast 可以轉(zhuǎn)換任何類型,這個在討論范圍之外。

對于下面的這個定義:

 1 class A
 2 {
 3 public:
 4     virtual ~A() {}
 5 };
 6 
 7 class B
 8     : public A
 9 {
10 public:
11     ~B() {}
12 };

如果用boost::shared_ptr包裝的話:

1 typedef boost::shared_ptr<A> APtr;
2 typedef boost::shared_ptr<B> BPtr;

想想通常對指針的使用:
1 *pA = new B();
2 *pB = dynamic_cast<B*>(pA);
3 // unsafe
4 *upB = static_cast<B*>(pA);
5 
6 pA->;
7 pB->;
8 // may crash
9 upB->;

如果使用boost::shared_ptr呢。
1 APtr pA = APtr(new B());    // OK
2 BPtr pB = pA;               // compile error

從根本上講,APtr 和 BPtr除了里面包裝的原生指針有點關(guān)系以外,他們就是完全不同的兩個類型,當(dāng)然A和B也是完全不同的類型呀,可是想想看其實B是知道A的存在的。可是BPtr完全不知道APtr的存在。那這兒cast怎么進(jìn)行呢?別說向下轉(zhuǎn)型了,向上轉(zhuǎn)型都成問題。

看看這段代碼:

1 template <class T>
2 class shared_ptr
3 {
4     template <class F>
5     shared_ptr(const shared_ptr<F>& p)
6         : _p(p._p)
7         , _np(p._np)
8     {}
9  private:
10    T* _p;
11    reference_counter _np;
12 };

這個構(gòu)造函數(shù)可以搞定自動向上轉(zhuǎn)型,因為編譯器可以自動檢查 _p(p._p) 的合法性。那向下轉(zhuǎn)型怎么辦呢?看了上面這段代碼,相信很容易解決想想啊轉(zhuǎn)型的問題了。 只要把  _p(p._p)  改成 _p(dynamic_cast<T*>(p._p) 就可以了,當(dāng)然要檢查指針的合法性,我就不多寫了。
當(dāng)然boost::shared_ptr的作者已經(jīng)想到這個問題,他給提供了解決方案:


 1 template<class T, class U> 
 2 shared_ptr<T> static_pointer_cast(shared_ptr<U> const & r)
 3 {
 4     return shared_ptr<T>(r, boost::detail::static_cast_tag());
 5 }
 6 
 7 template<class T, class U> 
 8 shared_ptr<T> dynamic_pointer_cast(shared_ptr<U> const & r)
 9 {
10     return shared_ptr<T>(r, boost::detail::dynamic_cast_tag());
11 }

需要用static_cast 轉(zhuǎn)換普通指針的地方,用shared_static_cast 轉(zhuǎn)換shared_ptr,
需要用dynamic_cast 轉(zhuǎn)換普通指針的地方,用shared_dynamic_cast 轉(zhuǎn)換shared_ptr.

前面說過,沒有const的shared_ptr,但是有


1 const A* pA = new B();
2 shared_ptr<const A> cpA(pA);         //const
3 APtr spA = const_pointer_cast<A>(cpA);

總結(jié)一下:
const_cast               const_pointer_cast
static_cast              static_pointer_cast
dynamic_cast             dynamic_pointer_cast

最后一個小問題:以前,boost中的shared_ptr的cast函數(shù)的名字是:shared_xxxx_cast,
后來,為了IDE自動提供幫助,改成了xxxx_pointer_cast。由此可見,設(shè)計庫還是要用戶至上。

posted on 2009-04-30 21:43 尹東斐 閱讀(5241) 評論(2)  編輯 收藏 引用

FeedBack:
# re: boost::shared_ptr 的 cast
2009-05-01 19:22 | 陳梓瀚(vczh)
引用計數(shù)要變的話也可以const,因為shared_ptr存的是引用計數(shù)的指針,而不只是引用計數(shù)。  回復(fù)  更多評論
  
# re: boost::shared_ptr 的 cast
2009-05-01 23:25 | 尹東斐
@陳梓瀚(vczh)

嗯,謝謝提醒,我理解有問題。  回復(fù)  更多評論
  

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


<2009年5月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

常用鏈接

留言簿(4)

隨筆檔案

文章分類

文章檔案

相冊

好友博客

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美成人午夜影院| 国产日韩久久| 美女诱惑一区| 亚洲欧美中文另类| 亚洲精品视频二区| 欧美亚洲免费高清在线观看| 伊人成年综合电影网| 欧美日韩亚洲视频一区| 久久天堂av综合合色| 国产精品99久久99久久久二8 | 中文精品一区二区三区| 欧美jjzz| 一区二区日韩| 亚洲免费一在线| 午夜一区在线| 久久久久网址| 欧美黄色aa电影| 国产精品国产a级| 国语自产在线不卡| 亚洲国产精品久久精品怡红院| 亚洲精品欧美日韩专区| 亚洲国产婷婷综合在线精品| 麻豆精品视频在线| 亚洲激情一区| 亚洲一区二区三区中文字幕| 欧美在线视频二区| 欧美日韩在线不卡一区| 狠狠噜噜久久| 亚洲欧美日韩国产一区二区三区 | 狠狠色综合网| 亚洲视频日本| 欧美成人午夜激情视频| 99热免费精品| 亚洲伦理一区| 欧美成人综合网站| 亚洲男人的天堂在线观看| 欧美成人精品1314www| 国产日本欧美一区二区三区| 日韩视频在线观看免费| 另类人畜视频在线| 亚洲欧美中文另类| 国产精品国内视频| 亚洲美女在线国产| 国语自产精品视频在线看8查询8| 国产欧美日韩三区| 午夜精品视频一区| 亚洲在线观看| 国产夜色精品一区二区av| 午夜精品久久久久| 午夜精品久久久久久久白皮肤| 欧美日韩高清不卡| 玖玖视频精品| 影音欧美亚洲| 欧美激情中文字幕在线| 欧美精品 日韩| 久久久五月婷婷| 亚洲一级一区| 狠狠做深爱婷婷久久综合一区| 另类亚洲自拍| 欧美视频一区在线| 女女同性女同一区二区三区91| 农夫在线精品视频免费观看| 一区二区三区欧美亚洲| 午夜影院日韩| 亚洲视频精选| 蜜臀av性久久久久蜜臀aⅴ| 99re成人精品视频| 久久精品国产亚洲高清剧情介绍| 亚洲国产综合在线看不卡| 亚洲综合国产激情另类一区| 亚洲久色影视| 久久精品卡一| 欧美一区在线视频| 国产精品高潮呻吟视频| 亚洲国产经典视频| 国产麻豆视频精品| 欧美激情一区二区三区蜜桃视频 | 亚洲电影毛片| 国产婷婷精品| 99国产精品私拍| 国产一区亚洲一区| 一本大道久久a久久综合婷婷| 精久久久久久| 欧美一级久久久久久久大片| 国产一区二区三区高清| 久久精品综合网| 裸体歌舞表演一区二区| 亚洲欧美国产日韩中文字幕| 久久黄色网页| 先锋亚洲精品| 欧美视频在线观看 亚洲欧| 免费欧美视频| 美女爽到呻吟久久久久| 欧美aa在线视频| 国内自拍一区| 欧美综合国产精品久久丁香| 一区二区欧美国产| 欧美国产日韩一二三区| 欧美大片免费| 日韩午夜av| 国产精品爽爽ⅴa在线观看| 欧美中在线观看| 久久综合久色欧美综合狠狠 | 亚洲美女在线视频| 国产精品久久久久久福利一牛影视| 亚洲视频1区2区| 久久精品国产欧美亚洲人人爽| 亚洲精品麻豆| 欧美日韩一卡| 欧美在线二区| 亚洲日韩欧美视频一区| 亚洲美女av在线播放| 欧美系列亚洲系列| 欧美在线影院| 亚洲免费中文| 亚洲国产一区在线| 欧美国产激情二区三区| 亚洲欧美日韩区| 欧美大片免费观看在线观看网站推荐| 欧美成人精品一区二区| 亚洲欧美日韩国产中文| 欧美夫妇交换俱乐部在线观看| 一本大道久久a久久综合婷婷| 国产一区二三区| 欧美福利电影在线观看| 亚洲欧美日韩国产成人精品影院| 久久综合久久综合这里只有精品| 亚洲精品国久久99热| 国产欧美日韩精品在线| 亚洲欧美成人一区二区在线电影| 久久人人超碰| 亚洲精品免费一二三区| 亚洲欧美电影院| 91久久午夜| 亚洲激情婷婷| 日韩一区二区精品在线观看| 在线免费精品视频| 亚洲乱码国产乱码精品精可以看| 亚洲一区二区欧美日韩| 国产伦精品一区二区三区视频孕妇 | 亚洲性xxxx| 中文一区字幕| 久久精品视频导航| 久久影视三级福利片| 欧美国产精品中文字幕| 欧美日韩三级| 狠狠色丁香婷综合久久| 亚洲欧洲精品一区二区三区不卡| 99天天综合性| 欧美在线综合| 最新高清无码专区| 亚洲免费一区二区| 欧美福利在线| 久久er精品视频| 欧美国产极速在线| 一区二区三区在线不卡| 韩国欧美国产1区| 在线视频亚洲一区| 久久精品亚洲一区二区| 亚洲欧洲日韩女同| 久久精品国产v日韩v亚洲| 欧美电影在线观看| 欧美成人午夜| 亚洲桃色在线一区| 亚洲福利av| 久久一区免费| 韩国精品一区二区三区| 亚洲素人一区二区| 亚洲精品乱码久久久久久| 欧美精品在线观看91| 亚洲激情偷拍| 欧美激情精品久久久久| 久久九九免费| 亚洲福利在线视频| 久久久中精品2020中文| 亚洲精品少妇| 国产农村妇女毛片精品久久麻豆| 国产在线不卡视频| 久久精品免费播放| 久久久免费av| 亚洲黄色成人网| 亚洲人体1000| 欧美日韩免费在线视频| 亚洲一区二区三区四区五区午夜 | 久久精品中文字幕免费mv| 麻豆成人91精品二区三区| 欧美刺激午夜性久久久久久久| 欧美肥婆在线| 久久久91精品国产一区二区三区| 久久国产精品黑丝| 亚洲欧洲精品一区二区三区波多野1战4| 欧美顶级艳妇交换群宴| 欧美日韩精品久久| 久热精品视频在线免费观看| 欧美激情精品久久久久| 欧美黄色片免费观看| 国产一区欧美日韩| 久久www成人_看片免费不卡| 久久久久久成人| 小嫩嫩精品导航|