/*!
@class 引用计数类
*/
class RefCounted
{
public:
//! @brief 增加计数
virtual void G_CALL ref() = 0;
//! @brief 减少计数
virtual void G_CALL unref() = 0;
protected:
~RefCounted()
{
}
};
template< typename T >
class RefPtr
{
public:
RefPtr(T* ptr = 0)
{
mPtr = 0;
*this = ptr;
}
RefPtr(const RefPtr<T>& ptr)
{
mPtr = 0;
*this = ptr;
}
~RefPtr()
{
if (mPtr)
{
mPtr->unref();
mPtr = 0;
}
}
RefPtr<T>& operator=(T* ptr)
{
if (ptr != mPtr)
{
if (mPtr)
{
mPtr->unref();
}
mPtr = ptr;
if (mPtr)
{
mPtr->ref();
}
}
return *this;
}
RefPtr<T>& operator=(const RefPtr<T>& ptr)
{
*this = ptr.mPtr;
return *this;
}
T* operator->() const
{
return mPtr;
}
T& operator*() const
{
return *mPtr;
}
operator bool() const
{
return (mPtr != 0);
}
T* get() const
{
return mPtr;
}
private:
T* mPtr;
};

本文介绍了一个引用计数类 RefCounted 和智能指针 RefPtr 的实现。RefCounted 类提供了 ref 和 unref 方法来管理对象的引用计数。RefPtr 模板类通过构造函数、析构函数、赋值操作符等实现对 RefCounted 对象的安全引用。
9284

被折叠的 条评论
为什么被折叠?



