文档章节

智能指针

大大美女女
 大大美女女
发布于 2014/06/04 17:48
字数 220
阅读 138
收藏 7

闲着没事写了个智能指针

#include <iostream>


class SmartCount {
  public:
    explicit SmartCount(int count) : count_(0) {
      count_ = count;
    }
  private:
    explicit SmartCount(const SmartCount&);
    SmartCount& operator = (const SmartCount&);
  public:
    int AddCount() {return ++count_;}
    int Release() {return --count_;}
  private:
    int count_;

};

template<class T>
class SmartPtr {
  public:
    SmartPtr(T* ptr):ptr_(ptr),counter_(new SmartCount(1)) {
      
    }

    ~SmartPtr() {
      if (ptr_ && counter_->Release() <= 0) {
        delete ptr_;
        ptr_ = NULL;
        delete counter_;
        counter_ = NULL;
      }
    }

  public:
    SmartPtr(const SmartPtr<T>& smart_ptr) {
      ptr_ = smart_ptr.ptr_;
      counter_ = smart_ptr.counter_;
      if (counter_) {
        counter_->AddCount();
      }
    } 


    SmartPtr& operator = (const SmartPtr<T>& smart_ptr) {
      if (&smart_ptr == this) {
        return *this;
      }
      if (smart_ptr.counter_) {
        smart_ptr.counter_->AddCount();
      }
      T* ptr_temp = ptr_;
      SmartCount* count_temp = counter_;
      ptr_ = smart_ptr.ptr_;
      counter_ = smart_ptr.counter_;
      if (ptr_temp && count_temp->Release() <= 0) {
        delete ptr_temp;
        ptr_temp = NULL;
        delete count_temp;
        count_temp = NULL;
      }
      return *this;
    }

    T* operator -> (void) {
      return ptr_;
    }

    T& operator * (void) {
      return *ptr_;
    }

    


  private:
    T* ptr_;
    SmartCount* counter_;
};

#include "main.h"

using namespace std;

class Test {
  public:
    Test(char* ch) {ch_ = ch;}
    ~Test() { }

    void Print() {
      cout << ch_ << endl;
      cout << "333333" << endl;
    }
  private:
    char* ch_;

};

int main(int argc, char* argv[]) {
 SmartPtr<Test> p ( new Test("123"));
 p->Print();

 SmartPtr<Test> p2(new Test("333"));
 p2 = p;
 p2->Print();

 SmartPtr<Test> p3(p2);
 p3->Print();
}


骑虎100 一个有趣的网站 好玩的网站 http://www.qihu100.com


© 著作权归作者所有

共有 人打赏支持
下一篇: i/o通信模型
大大美女女
粉丝 18
博文 60
码字总数 24479
作品 0
昌平
程序员
私信 提问
C++ 智能指针

智能指针(Smart Pointer),是一个来用存储指向动态分配(堆)对象指针的类。简单的说,它本身是一个类,这个类是用来存储对象指针。 一、智能指针的介绍 智能指针,就是具备指针功能同时提...

长平狐
2013/01/06
756
0
动态内存与智能指针

前言 1.生命周期 全局对象:程序启动时分配,程序结束时销毁 局部自动对象:执行流进入其定义的块时分配,执行流退出其定义的块时销毁 局部static对象:程序启动时分配(但在其定义的块或作用...

种地瓜
2016/04/05
58
0
C++Primer第五版 第十二章习题答案(11~20)

11:知识点1:理解变量的销毁与其内存的释放之间的关系:内置类型的指针在离开作用域时,本身会被销毁,但是其指向的内存空间什么都不会发生,必须以显式的delete进行释放空间。智能指针在离...

misayaaaaa
2017/03/05
0
0
C++智能指针

1 使用智能指针的原因   我们知道C/C++的指传统针可以用来通过指向对象地址来间接访问该对象,但是当某个指针指向人为申请的堆空间,我们时常忘记手动释放该空间从而造成内存泄漏。我们可以...

fx677588
2017/08/13
0
0
C++中智能指针的设计和使用

转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/7561235 智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的...

陈国成
2017/06/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

jquery通过id显示隐藏

var $div3 = $('#div3'); 显示 $div3.show(); 隐藏 $div3.hide();

yan_liu
49分钟前
1
0
《乱世佳人》读书笔记及相关感悟3900字

《乱世佳人》读书笔记及相关感悟3900字: 之前一直听「荔枝」,后来不知怎的转向了「喜马拉雅」,一听就是三年。上班的时候听房产,买房了以后听装修,兴之所至时听旅行,分手后听亲密关系,...

原创小博客
52分钟前
1
0
大数据教程(9.6)map端join实现

上一篇文章讲了mapreduce配合实现join,本节博主将讲述在map端的join实现; 一、需求 实现两个“表”的join操作,其中一个表数据量小,一个表很大,这种场景在实际中非常常见,比如“订单日志...

em_aaron
今天
1
0
cookie与session详解

session与cookie是什么? session与cookie属于一种会话控制技术.常用在身份识别,登录验证,数据传输等.举个例子,就像我们去超市买东西结账的时候,我们要拿出我们的会员卡才会获取优惠.这时...

士兵7
今天
1
0
十万个为什么之为什么大家都说dubbo

Dubbo是什么? 使用背景 dubbo为什么这么流行, 为什么大家都这么喜欢用dubbo; 通过了解分布式开发了解到, 为适应访问量暴增,业务拆分后, 子应用部署在多台服务器上,而多台服务器通过可以通过d...

尾生
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部