C++中的指针非常难以管理,引用计数是常用的一种管理指针的方法。
class HasPointer
{
public:
HasPointer(Type* p): pMgr(new pointerManager(p)){}
HasPointer(HasPointer& obj): pMgr(obj.pMgr)
{
++pMgr->use;
}
HasPointer& operator=(HasPointer& obj)
{
if(0==--pMgr->use)
{
delete pMgr;
pMgr=NULL;
}
pMgr=obj.pMgr;
pMgr->use++;
return *this;
}
~HasPointer()
{
if(NULL!=pMgr && (0==--pMgr->use))
{
delete pMgr;
pMgr=NULL;
}
}
private:
class pointerManager
{
public:
pointerManager(Type* p): pObj(p), use(1){}
~pointerManager()
{
delete pObj;
pObj=NULL;
}
Type* pObj;
unsigned int use;
};
pointerManager* pMgr;
};
// 应用:
int main()
{
int *pi=new int(10);
HasPointer(pi);
// 不要这个: delete pi;
// 因为在类:pointerManager的析构函数中将会执行它,如果想手动的用delete pi;
// 需要将pointerManager的西沟函数中去掉下面的语句
// delete pObj;
//pObj=NULL;
return 0;
}