#include <iostream>
using namespace std;
template<typename Type>
class auto_ptr
{
public:
auto_ptr(Type *d = NULL):ptr(d),own(d!=NULL){}
auto_ptr(const auto_ptr &ap)
{
ptr = ap.realse();
own = true;
}
auto_ptr& operator=(const auto_ptr &ap)
{
if(this!=&ap)
{
if(ap.own)//ap有拥有权。
{
ptr = ap.realse();
own = true;
}
else//ap没有拥有权.
{
ptr = ap.realse();
own = false;
}
}
}
~auto_ptr()
{
if(own)delete ptr;
}
Type operator*()
{
if(own)return *(this->ptr);
}
Type* operator->()
{
if(own)return ptr;
}
Type* realse()const//必须是const,常对象只能调用常方法.
{
if(own)
((auto_ptr *)(this))->own=false;
Type* tmp = this->ptr;
return tmp;
}
private:
bool own;//拥有权,并且同时只能只有一个对象有拥有权。
Type *ptr;
};
int main()
{
int *p = new int(20);
auto_ptr<int> ps(p);
auto_ptr<int> pb;
pb = ps;
cout<<*pb<<endl;
return 0;
}
原文地址:http://blog.csdn.net/liuhuiyan_2014/article/details/45688825