当前位置: 首页 > news >正文

许昌市建设局网站icp备案官网查询

许昌市建设局网站,icp备案官网查询,阎良做网站的公司,律师做网站推广有用吗文章目录 RAII一、auto_ptr二、unique_ptr三、shared_ptrshared_ptr的循环引用问题 四、weak_ptr总结 RAII RAII就是将资源交给一个对象管理#xff0c;这个对象能进行正常的管理和释放资源。 一、auto_ptr auto_ptr的问题是#xff1a;在拷贝构造和赋值重载时#xff0c… 文章目录 RAII一、auto_ptr二、unique_ptr三、shared_ptrshared_ptr的循环引用问题 四、weak_ptr总结 RAII RAII就是将资源交给一个对象管理这个对象能进行正常的管理和释放资源。 一、auto_ptr auto_ptr的问题是在拷贝构造和赋值重载时会将自己资源的管理权转移给对方。 templateclass T class auto_ptr { public:auto_ptr(T* ptr):_ptr(ptr){}T operator*(){return *_ptr;}T* operator-(){return _ptr;}//ap3(ap1)auto_ptr(auto_ptrT ap):_ptr(ap._ptr){ap._ptr nullptr;//必须置空否则两个指针对象管理同一块空间会调用析构两次}operator(auto_ptrT ap){_ptr ap._ptr;ap._ptr nullptr;}~auto_ptr(){delete _ptr; // _ptr是指针是内置类型默认生成的析构函数不处理//自定义类型调用它自己的析构_ptr nullptr;} private:T* _ptr; };这个auto_ptr实际不会用太挫了。 但面试可能要手撕也要会。 二、unique_ptr unique_ptr 简单粗暴地禁止了拷贝和赋值重载那就解决了上面auto_ptr的管理权转移问题了。 templateclass Tclass unique_ptr{public:unique_ptr(T* ptr):_ptr(ptr){}T operator*(){return *_ptr;}T* operator-(){return _ptr;}unique_ptr(unique_ptrT up) delete;unique_ptrT operator(unique_ptrT up) delete;~unique_ptr(){delete _ptr; // _ptr是指针是内置类型默认生成的析构函数不处理//自定义类型调用它自己的析构_ptr nullptr;}private:T* _ptr;};所以unique_ptr就比较适用于一个指针独占一个资源的情况。 三、shared_ptr shared_ptr使用了引用计数器最开始new对象时计数器为1。 而当其他的同类型的指针对象也指向该对象时计数器1。 当有指针对象调用析构函数时判断计数器是否为0如果不为0表明我这个对象还有其他的shared_ptr在管理不需要delete让计数器-1即可。 如果计数器为0表明当前的shared_ptr是最后一个指针对象管理资源了。就delete。 shared_ptr解决了auto_ptr的管理权转移问题也解决了unique_ptr的不让拷贝和赋值的问题。 注意的问题 1.不能赋值给自己否则计数器会。 还有一个问题默认的析构函数的处理方式是delete ptr。 如果指针管理的资源是T[]或者是fopen或者是malloc的呢 如果还使用默认的处理方式delete ptr就会出现问题。 资源是T[],就得用delete[] ,是fopen就得用fclose是malloc就得用free。 所以在传参的时候就需要传处理方法过来了。可以传对象的方法可以传lambda可以传包装器。 所以就需要将析构函数设置成一个对象/包装器调用的就是传进来的析构方法。2.实现赋值重载的时候有很多细节。 不能自己给自己赋值 在把对方赋值给自己之前需要把自己所指向的计时器减减因为我要只向其他的计时器了。如果减减后的计时器为0说明这块资源只有我一个指针在管理现在我要只想其他资源所以我要先释放我现在的资源才能去指向其他资源否则就会出现内存泄露问题。 templateclass Tclass shared_ptr{public://1) 使用定制删除器解决一个当new []时需要delete []的问题//2) 还有 使用malloc时需要free配对//3) 使用fopen需要fclose配对templateclass Dshared_ptr(T* ptr,D del):_ptr(ptr),_pcount(new int(1)),_del(del){}//然而这里有一个问题模板D不是全局的而是只针对这个构造函数//所以应该如何创建_del对象呢//使用包装器//function void(T*) _del;//因为不管是上面三种情况的哪一种共同点都是使用的仿函数的返回值都是void指针类型都是T*T operator*(){return *_ptr;}T* operator-(){return _ptr;}//sp3(sp1)shared_ptr(shared_ptrT sp):_ptr(sp._ptr),_pcount(sp._pcount) //让他们的引用计数器指针指向同一个计数器{(*_pcount);}//sp5 sp2shared_ptrT operator(shared_ptrT sp){//不能自己赋值给自己否则引用计数器会//这样判断是可以的只要不同的对象指向同一个资源空间这几个对象之间的赋值都是相当于自己给自己赋值if(_ptr sp._ptr) //if (_pcount sp._pcount) //这也可以{return *this;}//赋值前需要将之前的计数器--如果计数器为0就释放资源//因为我要指向其他资源了我原来的资源的计数器当然要--if (--(*sp._pcount) 0){_del(sp._ptr);delete sp._pcount;}_ptr sp._ptr;_pcount sp._pcount;(*_pcount);return *this;}~shared_ptr(){if (--(*_pcount) 0){_del(_ptr);delete _pcount;_pcount nullptr;_ptr nullptr;}}T* get() const {return _ptr;}int use_count() const {return *_pcount;}private:T* _ptr;int* _pcount;//包装器//包装器包装的_del是D类型这个D也不知道是什么类型//包装器可以包装仿函数包装对象的方法等。//如果只是普通的指针析构那就给一个缺省。function void(T*) _del [](T* ptr) {delete ptr; }; //dzt::shared_ptrint svr(new int); //这样的方式就是没传处理方式那默认就是用缺省。//dzt::shared_ptrint svr(new int[10],[](int* ptr){delete[] ptr};//这样的传参方式就用delete[]解决};shared_ptr的循环引用问题 循环引用问题是两个节点的shared_ptr指针互相指向的时候引用计数器都会1这就出现了互相的计数器都是2.在析构时都变成1此时就出现了到底谁先析构的问题。 就一直死循环了。 不过shared_ptr能解决日常生活99%的问题它只有一个缺点就是循环引用问题。 解决办法weak_ptrweak_ptr是专门解决循环引用这个问题的。 weak_ptr没有RAII没有引用计数不参与对象资源的管理和释放只是一个简单的访问资源的操作。 四、weak_ptr templateclass Tclass weak_ptr{public:weak_ptr():_ptr(nullptr){}weak_ptr(T* ptr):_ptr(ptr){}//weak_ptr必须支持一个shared_ptr构造weak_ptr的构造函数weak_ptr(const shared_ptrT sp):_ptr(sp.get()){}weak_ptrT operator(const shared_ptrT sp){//类外面无法直接访问类的私有成员_ptr sp.get();return *this;}//weak只支持访问资源的操作T operator*(){return *_ptr;}T* operator-(){return _ptr;}//weak_ptr不参与对象资源的管理和释放所以没有析构函数private:T* _ptr;};总结 本文讲述了几个智能指针的优缺点和模拟实现。
http://www.w-s-a.com/news/310492/

相关文章:

  • 青岛金融网站建设如何提交网站地图
  • 制作简单门户网站步骤网站建设论文的摘要
  • 可以直接进入网站的正能量照片学做静态网站
  • 织梦做社交网站合适吗网站的市场如何制作
  • 阳曲网站建设价格多少四川佳和建设工程网站
  • 免费注册店铺位置sem seo什么意思
  • 建筑网站搜图电子商务网站建设渠道
  • 学校网站内容四川手机网站开发
  • 网站制作公司违法商业网站运营成本
  • 显示佣金的网站是怎么做的广告设计主要做哪些
  • 做阿里网站的分录济南seo网站排名关键词优化
  • 北京建设银行纪念钞预定官方网站wordpress中文优化版
  • 宝安做棋牌网站建设找哪家效益快创意设计师个人网站
  • 做线上网站需要多少钱系统开发板价格
  • 建筑企业登录哪个网站wordpress feed地址
  • 网站建设流程百科提升seo搜索排名
  • 杭州网站建设 巴零做销售怎么和客户聊天
  • 北京自己怎样做网站wordpress oauth2插件
  • 上海800做网站wordpress建站的好处
  • 婚纱摄影网站设计模板如何做好网站内容
  • cdn网站加速招商计划书模板ppt
  • 我在某网站网站做代理开发小程序外包
  • 设计网站国外商城网站的建设费用
  • 网站开发工作需要什么专业学做网站游戏教程
  • 电子商务网站规划 分析 设计杭州网站优化平台
  • 汕头企业自助建站系统网站后台登陆验证码无法显示
  • 宁波网站制作服务做外贸推广自己网站
  • php 微信 网站开发青岛网站互联网公司
  • 网站软件免费下载大全网站建设开发价格高吗
  • asp网站制作软件上海做网站制作