编译器可以对一个->表达式多次应用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
上面实现是一种自动锁定技术。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)