//参考《More Effective C++》
#include <iostream>
using namespace std;
template<typename T>
class autoptr{
private:
T* r;
public:
autoptr(T* a=nullptr):r(a){}
//不能使用默认拷贝构造函数
autoptr(autoptr<T> & a){ r=a.r; a.r=nullptr; }
autoptr<T>& operator=(autoptr<T>& a){
if(this==&a)
return *this;
delete r; //赋值操作符在接受新对像所有权前必须删除
//原来拥有的对像,否则原来的对像将永远不
//会被删除
r=a.r; a.r=nullptr;
return *this;
}
~autoptr(){ delete r;}
auto operator *()->decltype(*r){
return *r;
}
T * operator->(){
return r;
}
};
int main()
{
autoptr<int> p(new int(10));
autoptr<int> x=p;
}