template <class T> class SmartPtr{ public: SmartPtr(T* p=0): pointee(p) {} template<class U> SmartPtr(SmartPtr<U> & rhs):pointee(rhs.release()){} template<class U> SmartPtr<T> & operator=(SmartPtr<U> & rhs) { if(this!=&rhs) reset(rhs.release()); return *this; } //允许兼容的指针进行复制或转换,派生类指针到基类指针的转换 ~SmartPtr(){ delete pointee; }; T& operator*() const{ return *pointee; } T* operator->() const{ return pointee; } T* get() const {return pointee; } //增加三个公共接口 T* release() { T *oldP=pointee; pointee=0; return oldP; } void reset(T *p=0){ if(pointee!=p){ delete pointee; pointee=p; } } private: T* pointee; };
时间: 2024-04-03 20:34:26 浏览: 14
智能指针源码 smartptr
这是一个 C++ 的智能指针类 SmartPtr,它可以自动管理指针所指向的对象的内存,避免内存泄漏的问题。它实现了拷贝构造函数,赋值运算符,析构函数和一些常用的操作符重载,如 *、->、get 等。同时,它还提供了三个公共接口 release、reset 和 get,可以方便地控制指针的释放和重置。这个智能指针类可以用于管理任何类型的指针,包括派生类指针和基类指针的转换。
阅读全文