C++句柄的理解

通俗的讲,c++句柄就像一个“复合指针”:它不但“指向”某个对象,还“记录”所指对象由于复制/赋值而被其他句柄拥有的次数。当没有句柄与该对象关联的时候,他还负责删除该对象。

泛型句柄类模板:

template<typename T>
class Handel{
public:
	Handle(T *p = 0):ptr(p),use(new size_t(1)){}
	T& operator*(){
		if(ptr)
			return *ptr;
	}
	T* operator->(){
		if(ptr)
			return ptr;
	}
	Handle(const Handle &h):ptr(h.ptr),use(h.use){++*use}
	Handle& operator=(const Handle &h){
		++*use;
		del();
		ptr = h.ptr;
		use = h.use;
		return *this;
	}
	~Handel(){del();}
private:
	T* ptr;
	std::size_t *use;
	void del(){
		if(--*use == 0)
		{
			delete ptr; delete use;
		}
	}
};

句柄实际上是一个类,之所以说他像一个指针,因为他重载了指针的解引用操作符和成员访问操作符;

ptr 指向句柄所要管理的对象,use指向次对象被其他句柄关联的次数,当没有其他句柄关联次对象的时候通过del()函数删除该对象。

使用句柄的好处是:用户在某些地方需要用指针操作对象时(比如把书(父类对象)和打折的书(派生类对象)加入同一个购物车Vector中),

用句柄而不用指针,可以无需担心指针的管理(e,什么时候该删除对象,指针删除的时候?还有别的指针指向次对象呢?),同时也可以获得动态绑定的行为。因为,句柄可以根据use来判断什么时候该删除对象。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值