智能指標一個簡單例子

來源:互聯網
上載者:User
/** The Code Project Open License (CPOL) 1.02**/class RC{private:    int count; // Reference countpublic:    void AddRef()    {        // Increment the reference count        count++;    }    int Release()    {        // Decrement the reference count and        // return the reference count.        return --count;    }};template < typename T > class SP{private:    T*    pData;       // pointer    RC* reference; // Reference countpublic:    SP() : pData(0), reference(0)     {        // Create a new reference         reference = new RC();        // Increment the reference count        reference->AddRef();    }    SP(T* pValue) : pData(pValue), reference(0)    {        // Create a new reference         reference = new RC();        // Increment the reference count        reference->AddRef();    }    SP(const SP<T>& sp) : pData(sp.pData), reference(sp.reference)    {        // Copy constructor        // Copy the data and reference pointer        // and increment the reference count        reference->AddRef();    }    ~SP()    {        // Destructor        // Decrement the reference count        // if reference become zero delete the data        if(reference->Release() == 0)        {            delete pData;            delete reference;        }    }    T& operator* ()    {        return *pData;    }    T* operator-> ()    {        return pData;    }        SP<T>& operator = (const SP<T>& sp)    {        // Assignment operator        if (this != &sp) // Avoid self assignment        {            // Decrement the old reference count            // if reference become zero delete the old data            if(reference->Release() == 0)            {                delete pData;                delete reference;            }            // Copy the data and reference pointer            // and increment the reference count            pData = sp.pData;            reference = sp.reference;            reference->AddRef();        }        return *this;    }};

使用例子:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.