智能指针(smart pointer)
智能指针是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的的销毁动态分配的对象,防止内存泄漏。
目前,C++标准库已提供了丰富的智能指针类,如auto_ptr,shared_ptr.。
由于经常平时使用VS05编码,而shared_ptr只有C++11才有,所以 自己实现了一个类似shared_ptr的智能指针类。如果错误的地方,请原谅并指明。
template <typename T>
class AutoPtr
{
public:
// 构造函数
explict AutoPtr(T* pPtr = 0)
{
if(pPtr)
{
m_pCounter = new int(1);
m_pPtr = pPtr;
}
else
{
m_pCounter = new int(0);
m_pPtr = NULL;
}
}
// 拷贝函数
explict AutoPtr(AutoPtr &pPtr)
{
(*(pPtr.m_pCounter))++;
m_pCounter = pPtr.m_pCounter;
m_pPtr = pPtr.m_pPtr;
}
// 赋值函数
AutoPtr& operator=(AutoPtr &pPtr)
{
if(this == *pPtr)
{
return *this;
}
Release();
(*(pPtr.m_pCounter))++;
m_pCounter = pPtr.m_pCounter;
m_pPtr = pPtr.m_pPtr;
return *this;
}
// 析构函数
~AutoPtr()
{
Release();
}
// 重新赋值
void reset(T* pPtr)
{
if (m_pPtr == pPtr)
{
return;
}
Release();
m_pCounter = new int(1);
m_pPtr = pPtr;
}
private:
void Release()
{
if(--(*(m_pCounter)) == 0)
{
delete m_pPtr;
delete m_pCounter;
m_pPtr = NULL;
m_pCounter = NULL;
}
}
private:
T *m_pPtr;
int *m_pCounter;
}