auto_ptr实现

//参考《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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值