智能型指標另一種實現(基於計數)

來源:互聯網
上載者:User
/* The following code example is taken from the book * "The C++ Standard Library - A Tutorial and Reference" * by Nicolai M. Josuttis, Addison-Wesley, 1999 * * (C) Copyright Nicolai M. Josuttis 1999. * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. */#ifndef COUNTED_PTR_HPP#define COUNTED_PTR_HPP/* class for counted reference semantics * - deletes the object to which it refers when the last CountedPtr *   that refers to it is destroyed */template <class T>class CountedPtr {  private:    T* ptr;        // pointer to the value    long* count;   // shared number of owners  public:    // initialize pointer with existing pointer    // - requires that the pointer p is a return value of new    explicit CountedPtr (T* p=0)     : ptr(p), count(new long(1)) {    }    // copy pointer (one more owner)    CountedPtr (const CountedPtr<T>& p) throw()     : ptr(p.ptr), count(p.count) {        ++*count;    }    // destructor (delete value if this was the last owner)    ~CountedPtr () throw() {        dispose();    }    // assignment (unshare old and share new value)    CountedPtr<T>& operator= (const CountedPtr<T>& p) throw() {        if (this != &p) {            dispose();            ptr = p.ptr;            count = p.count;            ++*count;        }        return *this;    }    // access the value to which the pointer refers    T& operator*() const throw() {        return *ptr;    }    T* operator->() const throw() {        return ptr;    }  private:    void dispose() {        if (--*count == 0) {             delete count;             delete ptr;        }    }    };#endif /*COUNTED_PTR_HPP*/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.