C++智能指针的设计和实现
作者:网络转载 发布时间:[ 2014/3/14 11:16:06 ] 推荐标签:C++ 设计
在SmartPointer类中,保留_counter的指针。
template<classT>
classSmartPointer{
public:
SmartPointer(T*t):pc(new_counter(1)){
cout<<"SmartPointer::SmartPointer()invodeduseis:"<<pc->use<<endl;
this->pt=t;
}
SmartPointer(SmartPointer<T>&rhs){
this->pc=rhs.pc;
this->pt=rhs.pt;
this->pc->use++;
cout<<"SmartPointercopyinvokeduseis:"<<pc->use<<endl;
}
~SmartPointer(){
pc->use--;
cout<<"SmartPointer::~SmartPointer()invodeduseis:"<<pc->use<<endl;
if(pc->use==0)
{
deletept;
deletepc;
}
}
SmartPointer<T>&operator=(SmartPointer<T>rhs){
if(rhs==*this){
return*this;
}
this->pt=rhs.pt;
this->pc=rhs.pc;
this->pc->use++;
cout<<"SmartPointer::operator=()invokeduseis:"<<pc->use<<endl;
return*this;
}
private:
T*pt;
_counter*pc;
};
例如:我们有一个HasPtr类,其类成员中有一个为指针*p。
classHasPtr{
public:
HasPtr(intval):value(val),p(newint(3)){
cout<<"HasPtr::HasPtr()invoked"<<endl;
}
~HasPtr(){deletep;cout<<"HasPtr::~HasPtr()invoded"<<endl;}
private:
int*p;
intvalue;
};
如果如下调用:
HasPtr*php=newHasPtr(3);
SmartPointer<HasPtr>psp(php);
SmartPointer<HasPtr>npsp(psp);
我们现在有两个智能指针对象,指向同一个HasPtr对象,其模型如下:
_counter的use成员(引用计数)为2.
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11