俗称的智能指
针
,主要功能是在指
针
生命期
结束
的
时
候,自动
释
放申
请
的空
间
,包括数
组
的。
这
个指
针
在
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:果然有疏漏或需要补充的地方,请指正。