最近学习了c++的智能指针,写下自己的理解:
智能指针可以通过c++模板类来实现,这个模板类的主要工作就是科学的管理由模板类参数生成的对象的数量。
智能指针的关键部分是对“=”操作符的重载工作。
举例:
class Stub
{
public:
void print()
{
cout<<"STUB:PRINT"<<endl;
}
~Stub()
{
cout<<"STUB:Destructor"<<endl;
}
};
template<typename T>
class SmartPtr
{
public:
SmartPtr& operator=(const SmartPtr& rhs)
{
..........................
}
...................
private:
T *ptr
size_t *pUse;
};
其中,pUse用于对象的计数。定义完成后应用比较简单(Stub是我们真正用到的类,SmartPtr只是对指向Stub对象的指针进行管理):
SmartPtr<Stub>t1(new Stub);//声明对象t1
SmartPtr<Stub>t2(t1);//声明对象t2,并用t1为其赋值
SmartPtr<Stub>t3(new Stub);
t3=t2;//此处的“=”操作符经过重载,赋值后指向t2对象的指针计数减一,指向t3对象的指针计数加一
t1->print();
(*t3).print();