C++编译器解析operator->机制及自锁定技术实现

C++编译器解析operator->机制及自锁定技术实现,第1张

机制说明

编译器可以对一个->表达式多次应用operator->,直到找到原始指针。

例子

好用的RAII手法

template
struct LockingProxy
{
	LockingProxy(T* pObj) : pointee_ (pObj )
	{
		pointee_->lock(); 
	}

	~LockingProxy()
	{ 
		pointee_->unlock(); 
	}
	
	T* operator->() const
	{ 
		return pointee_;
	}
	
	LockingProxy& operator=(const LockingProxy&) = delete;
	
private:
	T* pointee _;
};

另一个类的实现:

template
class SmartPtr
{
	// ...
	LockingProxy operator->() const
	{ 
		return LockingProxy(pointee_); 
	}
private:
	T* pointee_;
};

可以看出以上两个类都实现了operator->。
使用:

SmartPtr sp = new Widgetl
sp->doSomething();

技巧说明:
SmartPtr的operator->传回一个LockingProxy临时对象。编译器继续施行operator->,LockingProxy的operator->传回Widget*。编译器通过这个sp指针调用doSomething ()。调用期间,LockingProxy临时对象处于活跃状态并锁定Widget对象;即对象被安全锁定了。一旦 doSomething()返问,LockingProxy临时对象被摧毁,Widget对象也随之解锁(RAII)。

总结

上面实现是一种自动锁定技术。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/707412.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存