俗称的智能指针,主要功能是在指针生命期结束的时候,自动释放申请的空间,包括数组的。
这个指针在boost库里面有,只不过由于其功能比较全面,结构复杂理解上比较难,这里自己写了一个较为简单的,可以满足平时的绝大多数应用。
这里屏蔽了复制功能,为了避免某些不可预料的情况。
下面是一般的:
template<class T>
class SmartPtr
{
public:
SmartPtr(T* ptr=NULL) {
m_Ptr = ptr;
}
~SmartPtr(void) {
if (m_Ptr)
delete m_Ptr;
}
T* operator = (T* ptr) {
if (m_Ptr)
delete m_Ptr;
m_Ptr = ptr;
return m_Ptr;
}
operator T* () const {
return m_Ptr;
}
T& operator * () const {
return (*m_Ptr);
}
T* operator -> () const {
return m_Ptr;
}
bool operator ! () const {
return (m_Ptr == NULL);
}
bool operator == (T* ptr) const {
return (m_Ptr == ptr);
}
private:
SmartPtr(const SmartPtr& sPtr);
SmartPtr& operator = (const SmartPtr& sPtr);
private:
T* m_Ptr;
};
下面是数组的:
template<class T>
class SmartArray
{
public:
SmartArray(T* ptr=NULL) {
m_Ptr = ptr;
}
~SmartArray(void) {
if (m_Ptr)
delete [] m_Ptr;
}
T* operator = (T* ptr) {
if (m_Ptr)
delete [] m_Ptr;
m_Ptr = ptr;
return m_Ptr;
}
operator T* () const {
return m_Ptr;
}
T& operator [] (int idx) const {
return m_Ptr[idx];
}
bool operator ! () const {
return (m_Ptr == NULL);
}
bool operator == (T* ptr) const {
return (m_Ptr == ptr);
}
private:
SmartArray(const SmartArray& sPtr);
SmartArray& operator = (const SmartArray& sPtr);
private:
T* m_Ptr;
};
PS:果然有疏漏或需要补充的地方,请指正。