自己的引用计数

#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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值