自己的引用计数
来源:互联网 发布: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; }