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

            專職C++

            不能停止的腳步

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              163 Posts :: 7 Stories :: 135 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(28)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            本文地址:http://www.shnenglu.com/zdhsoft/archive/2014/08/01/207880.html
            現在C++智能指針有無數個實現了,多一個也無所謂。哈。
            這個智能指針是專門為cocos2dx 2.2.x定制的。主要是為了方便使用,同時又要遵循現有的cocos2dx的內存管理。特實現這樣一個智能指針。在使用的時候不需要考慮retain或release操作,也不需要new或delete操作!
            下面是實現代碼
            //在很多時候,類的成員是CCObject的子對象,為了保證對其正常使用,又要遵循cocos2dx的內存管理,特實現了這樣的一個智能指針,方便使用。
            #ifndef _X_COCOS_PTR_H_
            #define _X_COCOS_PTR_H_
            namespace zdh
            {
                template<class T>
                class XCocosPtr
                {
                public:
                    XCocosPtr()
                        :m_Object(nullptr)
                    {}

                    XCocosPtr(T * paramObject)
                        :m_Object(paramObject)
                    {
                        if (m_Object != nullptr)
                        {
                            m_Object->retain();
                        }
                    }

                    XCocosPtr(const XCocosPtr & paramPtr)
                        :m_Object(paramPtr.m_Object)
                    {
                        if (m_Object != nullptr)
                        {
                            m_Object->retain();
                        }
                    }

                    ~XCocosPtr()
                    {
                        ptr_release();
                    }
                    //重載賦值運算符
                    XCocosPtr & operator = (T * paramObject)
                    {
                        set(paramObject);
                        return *this;
                    }

                    XCocosPtr & operator = (XCocosPtr & paramObject)
                    {
                        set(paramObject.m_Object);
                        return *this;
                    }
                    //重載比較運算符
                    bool operator == (T * paramObject) const
                    {
                        return m_Object == paramObject;
                    }

                    bool operator != (T * paramObject) const
                    {
                        return m_Object != paramObject;
                    }
                    //重載*運算符
                    T & operator*()
                    {
                        return *m_Object;
                    }

                    const T & operator*() const
                    {
                        return *m_Object;
                    }
                    //重載->運算符,使其可以像指針那樣使用
                    T * operator ->()
                    {
                        return m_Object;
                    }

                    const T * operator ->() const
                    {
                        return m_Object;
                    }
                    //判斷對象是否為空
                    bool is_null() const
                    {
                        return m_Object == nullptr;
                    }
                    //判斷對象是否為不空
                    bool is_not_null() const
                    {
                        return m_Object != nullptr;
                    }
                    //創建對象 這里會使用調用對象的create來創建對象
                    T * create()
                    {
                        T * pNewObject = T::create();
                        set(pNewObject);
                        return pNewObject;
                    }
                    //設置對象
                    void set(T * paramObject)
                    {
                        if (m_Object != paramObject)
                        {
                            T * p = m_Object;
                            m_Object = paramObject;
                            if (m_Object != nullptr)
                            {
                                m_Object->retain();
                            }
                            if (isNotNULL(p))
                            {
                                p->release();
                            }
                        }
                    }
                    //取對象
                    T * get()
                    {
                        return m_Object;
                    }
                    //這里沒有使用release這個名稱,是為了防止和object的release混淆
                    void ptr_release()
                    {
                        if (m_Object != nullptr)
                        {
                            m_Object->release();
                            m_Object = nullptr;
                        }
                    }
                private:
                    T * m_Object;
                };
            }
            #endif
            例子
            //類的數據成員定義:
            XCocosPtr<CCSprite> m_Sprite;
            //在init中
            m_Sprite = CCSprite::create("");
            //
            m_Sprite.create()
            posted on 2014-08-01 11:30 冬瓜 閱讀(1829) 評論(0)  編輯 收藏 引用 所屬分類: 原創 、cocos2dx
            狠狠综合久久综合88亚洲| 精品永久久福利一区二区| 久久国产免费| 尹人香蕉久久99天天拍| 日本久久久久亚洲中字幕| 亚洲国产成人久久精品影视| 欧美精品丝袜久久久中文字幕 | 国产精品久久自在自线观看| 国产精品久久久久一区二区三区| 亚洲国产精品无码久久青草| 久久偷看各类wc女厕嘘嘘| 久久久久国产一区二区三区| 亚洲AV无码一区东京热久久| 久久精品国产色蜜蜜麻豆| 久久久久成人精品无码中文字幕| 久久成人永久免费播放| 狠色狠色狠狠色综合久久| 亚洲AV日韩精品久久久久久| 久久久精品人妻无码专区不卡 | 欧美一级久久久久久久大| 激情伊人五月天久久综合| 国产亚洲精久久久久久无码77777 国产亚洲精品久久久久秋霞 | 狠狠色丁香久久综合五月| 男女久久久国产一区二区三区| 久久天天躁狠狠躁夜夜2020| 久久综合丝袜日本网| 久久精品国产亚洲av水果派| 久久精品一本到99热免费| 久久久久亚洲AV成人网| 国产精品成人99久久久久| 好属妞这里只有精品久久| 久久精品亚洲一区二区三区浴池| 伊人久久国产免费观看视频| 久久亚洲视频| 亚洲精品97久久中文字幕无码| 94久久国产乱子伦精品免费| 色综合久久精品中文字幕首页| 久久久精品免费国产四虎| 国产亚洲欧美成人久久片| 91久久香蕉国产熟女线看| 久久精品成人免费国产片小草|