智能指针的简单实现

下面实现一个指向int的智能指针。 sub为辅助类,用于存储指针引用的状态。所有成员都是私有的,仅供autoptr类调用。

class sub{
    int * ptr;
    int count;
    friend class autoptr;
    sub(int * p) :ptr(p), count(1){}
    ~sub(){
        if (--count == 0)
            delete ptr;
    }
};

class autoptr{
public:
    autoptr(int * pBase) : psub(new sub(pBase)) {}
    autoptr(const autoptr & autop) : psub(autop.psub) { ++psub->count; }
    autoptr & operator = (const autoptr & autop){
        if (--psub->count == 0)//等号左侧减引用
            delete psub; 
        psub = autop.psub;
        ++psub->count;//增加原等号右侧引用数
        return *this;
    }
private:
    sub* psub;
};

int main(){
    int * p1 = new int(1);
    int * p2 = new int(2);
    autoptr ptr1(p1);
    autoptr ptr2(ap1);
    autoptr ptr3(p2);
    ptr3= ptr2;
    return 0;
}

智能指针实现的结构如下图所示:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,982评论 25 708
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,351评论 11 349
  • 前几天画的,好像有点丑
    杨洋家的小仙女阅读 148评论 0 4
  • 如果自己不够强大,再喜欢的东西放在你面前也无能为力,只能这样乖乖的看着。这就叫:心有鱼,而力不足! ​​​
    骚年无梦阅读 249评论 0 1