码迷,mamicode.com
首页 > 其他好文 > 详细

智能指针

时间:2019-05-23 21:01:02      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:template   ret   turn   ==   计数   amp   public   span   new   

 

template <class T>
class SharedPtr
{
public:
    SharedPtr():ptr(new T()),count(new int(1)){}//无参构造
    explicit SharedPtr(T *src):ptr(str),count(new int(1)){}//有参构造
    explicit SharedPtr(T value):ptr(new T(value)),count(new int(1)){}//有参构造

    SharedPtr(const SharedPtr &rhs) :ptr(rhs.ptr), count(rhs.count)//拷贝构造
    {
        ++(*count);
    }

    SharedPtr& operator=(const SharedPtr &rhs)//赋值运算符
    {
        ++(*rhs.count);
        if (--(*count) == 0)
        {
            delete ptr;
            delete count;
        }
        ptr = rhs.ptr;
        count = rhs.count;
        return *this;
    }

    ~SharedPtr()
    {
        if (--(count) == 0)
        {
            delete ptr;
            delete count;
        }
    }

    T* get() const //获取资源
    {
        return ptr;
    }
private:
    T *ptr;//原始指针
    int *count;//引用计数
};

 

智能指针

标签:template   ret   turn   ==   计数   amp   public   span   new   

原文地址:https://www.cnblogs.com/beixiaobei/p/10914264.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!