智能指针源码

智能指针源码
智能指针源码,可像普通指针一样使用,但可以自动释放内存,代码很短,看一下就明白原理了。
#ifndef AUTOPTR
#define  AUTOPTR

/**/ /**
 * 智能指针类
 
*/

template
< class  T >
class  AutoPtr  {
public :
    AutoPtr(T
* p = 0) : pointee(p) {} //默认构造函数

    template
<class U>
        AutoPtr(AutoPtr
<U>& rhs) : pointee(rhs.release()) {}//复制构造函数

    
~AutoPtr() {delete pointee;}

    template
<class U>
    AutoPtr
<T>& operator=(AutoPtr<U>& rhs) //赋值函数
        if (this != &rhs) {
            reset(rhs.release());
        }

        
return *this;
    }


    T
& operator*() const {return *pointee;} 
    
    T
* operator->() const {return pointee;}

    T
* get() const {return pointee;} //获取dumb pointer

    T
* release() //释放dumb pointer 的拥有权,并返回其值
        T* oldPointee == pointee;
        pointee 
= 0;
        
return oldPointee;
    }
 
    
    
void reset(T* p=0//重复置p指针
        if (pointee != p) {
            delete pointee;
            pointee 
= p;
        }

    }


private :
    T
* pointee;
}
;

#endif  AUTOPTR

test.cpp
#include  " AutoPtr.h "
#include 
< iostream >
#include 
< string >
using   namespace  std;

int  main()  {
    AutoPtr
<int> p = new int;
    
*= 100;
    printf(
"%d\n"*p);

    AutoPtr
<string> sp = new string;
    
*sp = "hello world";
    printf(
"%s\n", sp->c_str());
    
return 0;
}

你可能感兴趣的:(智能指针源码)