智能指针auto_ptr

#include<iostream>

using namespace std;

template<typename T>
class my_auto_ptr
{
private:
	T *m_ptr;
public:
	my_auto_ptr():m_ptr(NULL)
	{
	}
	my_auto_ptr(T* ptr):m_ptr(ptr)
	{
	}
	~my_auto_ptr() throw()
	{
		delete m_ptr;
		m_ptr = NULL;
	}
	my_auto_ptr(my_auto_ptr<T> &ptr)
	{
		m_ptr = ptr.Release();
	}
	my_auto_ptr<T> & operator = ( my_auto_ptr<T> &ptr)
	{
		//看是否是自己
		if(m_ptr == ptr.Get())
		{
			return (*this);
		}
		//删除原来的东西
		if(m_ptr)
		{
			delete m_ptr;
			m_ptr = NULL;
		}
		m_ptr = ptr.Release();
		return (*this);
	}
	T & operator *()
	{
		return *m_ptr;
	}
	T * operator->()
	{
		return m_ptr;
	}
	T *Release()
	{
		T* temp = m_ptr;//将类中的指针保存起来
		m_ptr = NULL;//将自己的指针赋空
		return temp;//返回保存的指针
	}
	T *Get()
	{
		return m_ptr;
	}

};

int main()
{
	int *temp = new int (1234);
	my_auto_ptr<int> intPtr(temp);
	my_auto_ptr<int> intPP;
	intPP = intPtr;
	cout<<*intPP<<endl;
	cout<<*intPtr<<endl;
	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值