关闭

自己的引用计数

488人阅读 评论(0) 收藏 举报
分类:
#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;  
} 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:574741次
    • 积分:7869
    • 等级:
    • 排名:第2618名
    • 原创:215篇
    • 转载:107篇
    • 译文:11篇
    • 评论:55条
    最新评论