// 通用库
namespace Common
{
// 智能指针
template <typename Type>
class CSmartPtr
{
public:
// 无参数构造函数
CSmartPtr()
{
m_pData = NULL;
m_pUsedCnt = NULL;
}
// 有参数构造函数
CSmartPtr(Type* pData)
{
m_pData = pData;
m_pUsedCnt = new unsigned int(1);
}
// 复制构造函数
CSmartPtr(const CSmartPtr& smartPtr)
{
// 全部指向复制右值
++*smartPtr.m_pUsedCnt;
m_pData = smartPtr.m_pData;
m_pUsedCnt = smartPtr.m_pUsedCnt;
}
// 析构函数
~CSmartPtr()
{
RefDec();
}
public:
// 重载赋值运算符
CSmartPtr& operator =(const CSmartPtr& smartPtr)
{
// 先引用自增,再引用自减,防止自我赋值
++*smartPtr.m_pUsedCnt;
RefDec();
m_pUsedCnt = smartPtr.m_pUsedCnt;
m_pData = smartPtr.m_pData;
return *this;
}
// 重载指针运算符
Type* operator ->()
{
return m_pData;
}
// 重载取址运算符
Type& operator *()
{
return *m_pData;
}
// 重载类型转换符
operator Type*()
{
return m_pData;
}
private:
// 引用自减
void RefDec()
{
if (m_pUsedCnt != NULL && --*m_pUsedCnt == 0)
{
delete m_pUsedCnt;
m_pUsedCnt = NULL;
if (m_pData != NULL)
{
delete[] m_pData;
m_pData = NULL;
}
}
}
private:
// 引用计数
unsigned int* m_pUsedCnt;
// 内容缓冲区
Type* m_pData;
};
}
智能指针类
最新推荐文章于 2023-07-23 17:30:16 发布