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

网站开发 接单成都91获客营销中心

网站开发 接单,成都91获客营销中心,wordpress 中国加速,wordpress修改主题代码手写智能指针shared_ptr 本文尝试手写shared_ptr,此外如果使用memory库中的make_shared相对于shared_ptr有以下好处: make_shared会在一次内存分配中同时分配对象本体和引用计数减少安全异常,两次操作变一个高效的引用计数管理,一…

手写智能指针shared_ptr


本文尝试手写shared_ptr,此外如果使用memory库中的make_shared相对于shared_ptr有以下好处:

  1. make_shared会在一次内存分配中同时分配对象本体和引用计数
  2. 减少安全异常,两次操作变一个
  3. 高效的引用计数管理,一个内存块中存储对象和引用计数,指针访问时减少额外的缓存访问
  4. 代码简洁不用new
#include<iostream>
#include<memory>template<typename T>
class ShareCount{
private:T* ptr;//指针管理的对象int count;//引用计数//禁止拷贝构造函数和赋值ShareCount(const ShareCount&)=delete;ShareCount& operator=(const ShareCount&)=delete;
public://构造函数ShareCount(T *p):ptr(p),count(1){};//析构~ShareCount(){delete ptr;};//增加引用计数void increment(){count++;};//减少引用计数void decrement(){//如果计数为0则删除对象if(--count==0){delete this;}};//返回指针管理的对象T* get() const{return ptr;}
};template<typename T>
class shared_ptr{
private:T* ptr;//指向指针管理的对象ShareCount<T> *countPtr;//管理智能指针引用计数器类对象
public://构造函数shared_ptr(T* p = nullptr):ptr(p){//调用构造if(p){countPtr=new ShareCount<T>(p);}else{countPtr=nullptr;}}//拷贝构造 不新开辟空间 只添加计数shared_ptr(const shared_ptr& other):ptr(other.ptr),countPtr(other.countPtr){//如果智能指针引用对象存在则计数器加1if(countPtr){countPtr->increment();}}//移动构造 std::move等转为右值引用时调用,右值&&及临时存在的对象//移动构造参数不加const,并删除原来的资源shared_ptr(shared_ptr&& other):ptr(other.ptr),countPtr(other.countPtr){other.ptr=nullptr;other.countPtr=nullptr;}//析构函数~shared_ptr(){if(countPtr){countPtr->decrement();}}//重写shared_ptr的-> 返回的是T* 指向指针管理的对象T* operator->() const {return ptr;}//解引用返回的是T* 指针的解引用T& operator*() const{return *ptr;}//reset void reset(T* p = nullptr){//如果两个指针不相同,指针改变if(p!=ptr){//计数器不为空,且指针改变(减少一个),计数器应该减去1if(countPtr){countPtr->decrement();}}//相同或者不同都指向新的空间,只是不同会导致计数器减一//如果为空则为nullptrptr=p;if(p){//如果p不为空,创建新的计数器countPtr=new ShareCount<T>(p);}else{countPtr=nullptr;}}//公共方法get返回指针T* get() const{return ptr;}};
struct data{int mydata;data(int d){mydata=d;}
};
int main(){shared_ptr<int> ptr1(new int(10));//调用拷贝构造,ptr和countPtr都是同一个,只是countPtr increment调用了count+1shared_ptr<int> ptr2=ptr1;std::cout<<"ptr1:"<<(*ptr1)<<std::endl;std::cout<<"ptr2:"<<(*ptr2)<<std::endl;ptr1.reset();std::cout<<"ptr2:"<<(*ptr2)<<std::endl;shared_ptr<int> ptr3=std::move(ptr2);// ptr2为空 以下代码Segmentation fault// cout<<"ptr2:"<<(*ptr2)<<endl;std::cout<<"ptr3:"<<(*(ptr3.get()))<<std::endl;//memory中std::shared_ptr也有类似效果std::shared_ptr<int> p1(new int(10));std::cout<<"std::p1:"<<(*p1)<<std::endl;//或者使用memory中make_shared就不用new了// 1.make_shared会在一次内存分配中同时分配对象本体和引用计数// 2.减少安全异常,两次操作变一个// 3.高效的引用计数管理,一个内存块中存储对象和引用计数,减少额外指针的访问// 4.代码简洁不用newstd::shared_ptr<int> p2=std::make_shared<int>(10);std::cout<<"std::p2:"<<(*p2)<<std::endl;return 0;
}

文章转载自:

http://x41fWA81.nqybs.cn
http://lSjZBt1D.nqybs.cn
http://eDtha5Hy.nqybs.cn
http://03QwFL5E.nqybs.cn
http://tt7PeUAp.nqybs.cn
http://LQmfA45S.nqybs.cn
http://XsijYK1g.nqybs.cn
http://E0jH17Wy.nqybs.cn
http://Vxx5BJPB.nqybs.cn
http://OBhlxSra.nqybs.cn
http://Yx8C8eb4.nqybs.cn
http://Mvlx1mBC.nqybs.cn
http://aIAfmaYt.nqybs.cn
http://OigRa2mv.nqybs.cn
http://jUUL79jw.nqybs.cn
http://QME09r7h.nqybs.cn
http://G6oQl4ZO.nqybs.cn
http://fvUrEpF2.nqybs.cn
http://BvHpIKjW.nqybs.cn
http://EtLscIWb.nqybs.cn
http://cUh4Re0U.nqybs.cn
http://6jogskH3.nqybs.cn
http://2xwc06zk.nqybs.cn
http://r60oCaW1.nqybs.cn
http://zxWADmHA.nqybs.cn
http://DxpU5dEb.nqybs.cn
http://vEnbvm7E.nqybs.cn
http://8Ph2yufV.nqybs.cn
http://JOHB9Ofa.nqybs.cn
http://IoOJrCjA.nqybs.cn
http://www.dtcms.com/wzjs/723471.html

相关文章:

  • 做网站公司 陕西渭南专业电商网站建设
  • 百度建一个网站多少钱gta5买办公室 网站正在建设
  • 郑州金水区做网站公司如何做正规的采集网站
  • 佛山服务类网站建设国外优秀摄影作品网站
  • 惠州做网站好的公司东莞网站建设 服饰
  • 陕西建设 节水 官方网站迅驰互联网站建设网络推广怎么样
  • 学校为什么要做网站企业手机网站建设精英
  • 网站开发属于什么资产网站图片用什么格式
  • 网站的通栏怎么做wordpress培训类网站模板下载
  • 做微整去那个网站找好的医院专注徐州网站开发
  • 电子商务个人网站可以备案吗做几个小网站还是做一个大网站
  • 郑州设计师网站电子商务网站建设实例
  • 商洛市城乡建设规划局网站一个完整的项目策划书
  • 男女做那个网站动态图MAC怎么做网站
  • 海南网站建设方案wordpress网盘搜索
  • 鹿寨县住房和城乡建设局网站互联网 网站建设
  • 建设银行官方个人网站wordpress改后台地址
  • 网站上怎么引用视频wordpress 免签约支付
  • 关于做网站的合同南康做网站
  • 企业网站空间买虚拟主机信阳seo优化
  • 福州网站制作策划响应式网站广州网站建设
  • 建站网站盗用了别人的案例上海网络平台有哪些
  • 网站建设邀标函建设银行mylove网站
  • 建设厅网站2015154vr哪家公司做得好
  • 老男孩linux网站霸州网站优化
  • 网站备案幕布 下载海南省住房城乡建设厅网站首页
  • 网站自定义功能实现学做沪江网站要多久
  • 企业网站建设注意点怎么做电脑网站后台
  • 手机网站收录北京中航空港建设工程有限公司网站
  • 网站建设的数据储存在哪里山东省建筑住房和城乡建设厅网站