自己的引用计数

来源:互联网 发布:java上传文件相对路径 编辑:程序博客网 时间:2024/05/22 13:18
#include<iostream>  using namespace std;  class ObjBase  {  public:int *pi;  //数据size_t* use;  //计数器ObjBase(){  cout << "U_ptr constructor called !" << endl;  }  ~ObjBase()  {  cout << "U_ptr distructor called !" << endl;  }  };  class Inherit:public ObjBase{public:Inherit(int* p){pi = p;use = new size_t(1);cout << "HasPtr constructor called ! " << "use = " <<*use << endl;  }Inherit(const Inherit& orig){pi = orig.pi;use = orig.use;++*use;cout << "Inherit constructor called ! " << "use = " << *use << endl;  }Inherit& operator=(const Inherit& rhs){  ++*rhs.use;  if (--*use == 0)  {delete use;  delete pi;  }use = rhs.use;   pi = rhs.pi;return *this;  }  ~Inherit()  {  cout << "Inherit distructor called ! " << "use = " <<*use << endl;  if (--*use == 0)  {delete pi;  delete use;}}  };int main(void)  {  int *pi = new int(42);  //一个数据Inherit *hpA = new Inherit(pi);Inherit* hpB = new Inherit(*hpA);Inherit* hpC = new Inherit(*hpA);Inherit* hpD = new Inherit(*hpB);int *pi2 = new int(42);  //一个数据Inherit* hpE = new Inherit(pi2);*hpE = *hpA;delete hpA; delete hpB;    delete hpC; delete hpD;delete hpE;return 0;  } 

原创粉丝点击