template<class Type>
class SmartPtrToConst
{
//这个类作为基类而存在,为了实现从const smart pointer 到smart pointer的转换
....
protected:
union
{
const Type* constPointer;
Type* pointer;
};
};
template<class Type>
class SmartPtr:public SmartPtrToConst//继承自基类,原理:const类型的指针可以做的,Non-const类型一样可以做,而且可以做得更多
{
public:
SmartPtr(Type* realPtr = 0):pointer(realPtr){}
//拷贝构造函数,传递控制权
SmartPtr(SmartPtr& rhs)
{
pointer = ths.pointer;
ths.pointer = 0;
}
~SmartPtr(){delete pointer;}
//赋值操作符
//参数不为const引用,是修改实参本身,传递控制权
SmartPtr& operator=(SmartPtr& rhs);
{
if(*this == SmartPtr)
return *this;
//清除当前对象
delete pointer;
pointer = rhs.pointer;
//传递控制权限
rhs.pointer = 0;
return *this;
}
Type* operator->() const
{
return pointer
}
Type& operator*() const
{
return *pointer;
}
//完成判断灵巧指针与控制比较
//该实现可能存在问题,不确定
//if(!smartObject1 == !smartObject2)
bool operator!() const
{
if(pointer==null)
return true;
return false;
}
//将灵巧指针转换为dump指针,一般禁止这样做,避免不必要的麻烦,隐式类型转换
//在需要dump指针的函数里面,传递灵巧指针,不能编译通过
//operator Type*()
//{
// return pointer;
//}
//模板成员函数
//实现灵巧指针派生类到基类的类型转换
//例:SmartPtr<SubClass> -->SmartPtr<BaseClass>
template<class newType>
operator SmartPtr<newType>()
{
//词条语句编译可以通过,dump指针可以进行基类与派生类的转换
//smart指针同样可以进行传递
return SmartPtr<newType>(pointer);
}
private:
//Type* pointer;//如果const类型的smart pointer类存在,就不需要
};
C++灵巧指针
最新推荐文章于 2022-04-06 14:33:35 发布