首页 > 代码库 > 实现类似shared_ptr的引用计数
实现类似shared_ptr的引用计数
13.27 定义使用引用计数版本的HasPtr
#include<iostream>#include<string>#include<new>using namespace std;class HasPtr{public: HasPtr(const string &s=string()):ps(new string(s)),i(0),use(new size_t(1)) {cout<<"constructer"<<endl;} HasPtr(const HasPtr &h):i(h.i) { cout<<"copy constructer"<<endl; ps=h.ps; ++*h.use; use=h.use; } HasPtr& operator=(const HasPtr &h) { ++*h.use; //将原来分配的内存空间删除 while(--*use==0) { delete ps; delete use; } //指向新的内存空间 ps=h.ps; i=h.i; use=h.use; return *this; } //如果在赋值操作中删除了左边对象的内存空间,则此处调用析构函数时将不再删除内存空间,但是该对象还是会被析构 ~HasPtr() { if(--*use==0) { delete ps; delete use; } cout<<"destructer"<<endl; }private: string *ps; int i; size_t *use;};int main(){ HasPtr h; HasPtr hh(h); hh=h; return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。