C++灵巧指针

来源:互联网 发布:sql使用教程 编辑:程序博客网 时间:2024/06/11 21:25
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(){deletepointer;}//赋值操作符//参数不为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类存在,就不需要};

0 0
原创粉丝点击