• <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>

            eXile 的專欄

            懸掛指針與boost::weak_ptr

               與內存泄露相比,C++最令人頭痛的問題是內存越界,而內存越界很多情況下是由于懸掛指針引起的。  
              假設一個指針變量:
              Object * ptr;
              使用ptr時,我們除了要判斷ptr是否為0以外,還要懷疑它指向的對象是否有效,是不是已經在別的地方被銷毀了。我們希望當它指向的對象被銷毀時,ptr被自動置為0。
              顯然,C++沒有這種機制,但是,可以借助于boost::weak_ptr做到這一點。

            inline void null_deleter(void const *
            {
            }

            class X
            {
            private:

                shared_ptr
            <X> this_;
                
            int i_;

            public:

                
            explicit X(int i): this_(this, &null_deleter), i_(i)
                {
                }

                X(X 
            const & rhs): this_(this, &null_deleter), i_(rhs.i_)
                {
                }

                X 
            & operator=(X const & rhs)
                {
                    i_ 
            = rhs.i_;
                }

                weak_ptr
            <X> weak_this() const { return this_; }
            };


             

            定義變量:
            weak_ptr<X> ptr = x.weak_this();  // x為一個X 對象 

            則當 x 被銷毀時,ptr 被自動置為無效。使用方法如下:

            if ( shard_ptr<X>  safePtr  = ptr.lock() )  safePtr->do_something();

            這種辦法用于單線程中,因為 x  對象可能是基于棧分配的。如果需要在多線程中訪問X對象,那么最好的辦法還是使用shared_ptr 來管理對象的生命期。這樣的話,對于safePtr, 可以保證在 safePtr 的生命期內,它所指向的對象不會被其它線程刪除。

            posted on 2007-10-11 11:49 eXile 閱讀(4570) 評論(3)  編輯 收藏 引用 所屬分類: C/C++代碼片段STL/BOOST

            評論

            # re: 懸掛指針與boost::weak_ptr 2007-10-11 12:33 夢在天涯

            恩,lz的boost::smartptr很是了解,不過這樣看起來有點復雜,從shared到weak,最后又到shared,能不能直接使用weak_ptr,我還一直不太明白weak_ptr的真正用法,好像是觀察指針是否可用?  回復  更多評論   

            # re: 懸掛指針與boost::weak_ptr[未登錄] 2007-10-11 13:47 exile

            weak_ptr的主要目的是為了解決引用計數的循環引用問題
            boost 出于線程安全的考慮,并沒有為weak_ptr提供->重載或get方法,所以不能直接使用, 還得轉化成shared_ptr  回復  更多評論   

            # re: 懸掛指針與boost::weak_ptr 2011-07-26 09:25 harly.he

            weak肯定得從share轉換而來。先有share后有weak,理由和講解可見 http://www.cnblogs.com/TianFang/archive/2008/09/20/1294590.html  回復  更多評論   

            導航

            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            統計

            常用鏈接

            留言簿(18)

            隨筆分類

            隨筆檔案

            服務器編程

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            熟妇人妻久久中文字幕| 日韩va亚洲va欧美va久久| 午夜人妻久久久久久久久| 久久久久成人精品无码中文字幕| 久久精品人人槡人妻人人玩AV| 久久ZYZ资源站无码中文动漫| 品成人欧美大片久久国产欧美...| 亚洲欧洲精品成人久久奇米网| 久久香蕉超碰97国产精品| 久久久久成人精品无码 | 国产精品成人久久久久三级午夜电影| 老司机国内精品久久久久| 亚洲午夜精品久久久久久浪潮 | 99久久精品午夜一区二区| 久久国产综合精品五月天| 久久精品a亚洲国产v高清不卡| 久久精品国产亚洲精品| 欧美激情精品久久久久| 亚洲欧美伊人久久综合一区二区| 国产精品女同一区二区久久| 精品久久久久久久无码| 中文字幕久久精品无码| 伊人久久成人成综合网222| 精品久久久久久无码中文字幕| av国内精品久久久久影院| 99久久精品免费看国产一区二区三区| 久久久99精品成人片中文字幕| 99久久99这里只有免费的精品| 久久综合狠狠综合久久| 亚洲精品无码久久久久sm| 综合久久一区二区三区| 无码任你躁久久久久久久| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 青青青青久久精品国产| 999久久久无码国产精品| 久久久国产精品亚洲一区| 亚洲国产一成人久久精品| 伊人久久大香线蕉综合Av| 国产亚洲精久久久久久无码77777| 欧美日韩精品久久免费| 中文字幕乱码人妻无码久久|