资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > C/C++/C#

实现c++智能指针

C/C++/C# 更新时间: 发布时间: 计算机考试归档 最新发布

实现c++智能指针

改造一下标准库里的share指针

// 需要一个结构体保存计数器和裸指针
template 
struct Conptr {
    T * ptr;
    unsigned int Counter;
};
 
template 
class shared_ptr {
    public:
      Conptr * ptr;

      // 允许通过 () 或者 = 传入指针
      shared_ptr(T *aptr){
        ptr = new Conptr;
        ptr->ptr = aptr;
        ptr->Counter = 1;
      }
      // 允许复制构造
      shared_ptr(const shared_ptr & aptr){
        ptr = aptr->ptr;
        ptr->Counter ++;
      }
      ~shared_ptr(){
        ptr->Counter --;
        if(ptr->Counter == 0){
            delete ptr->ptr;
            delete ptr;
        }
      }
 
      T * const operator -> (){
          return ptr->ptr;
      }
      // 禁止循环构造
      shared_ptr & operator = (shared_ptr & aptr) = delete;
      // 禁止生成裸指针
      shared_ptr() = delete;
      // 通过get()得到值,而不是指针
      T & get(){
        return * (ptr->ptr);
      }

};

class test{
public:
  test(){std::cout<<"create an obj of the test class";}
  ~test(){std::cout<<"delete the obj";}

};

int main(){
  shared_ptr ptr = new int;
  ptr.get() = 10;
  std::cout << ptr.get();
  shared_ptr ptr2 = ptr;

  {
    shared_ptr tp = new test;
  }

  auto test_for_function [&](const shared_ptr & p){
    share_ptr t = p;
    return t;
  }

  shared_ptr tp2 = test_for_function();

  ptr2 = ptr; // error
  shared_ptr ptr3; // error
}

转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/1021966.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【实现c++智能指针】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2