auto_ptr

1.auto_ptr移转拥有权:

#include <iostream>
#include <memory>
using namespace std;

template <class T>
ostream & operator<<(ostream& strm,const auto_ptr<T>& p)
{
	if (p.get()==NULL)
	{
		strm<<"NULL";
	}
	else
	{
		strm<<*p;
	}
	return strm;
}

int main()
{
	auto_ptr<int> p(new int(42));
	auto_ptr<int> q;
	cout<<"after initialization:"<<endl;
	cout<<"p:"<<p<<endl;
	cout<<"q:"<<q<<endl;

	q=p;
	cout<<"after assigning auto pointers:"<<endl;
	cout<<"p:"<<p<<endl;
	cout<<"q:"<<q<<endl;

	*q+=13;
	p=q;
	cout<<"after change and reassignment:"<<endl;
	cout<<"p:"<<p<<endl;
	cout<<"q:"<<q<<endl;
	system("pause");
}

  2.const auto_ptr特性:

 

#include <iostream>
#include <memory>
using namespace std;

template <class T>
ostream & operator<<(ostream& strm,const auto_ptr<T>& p)
{
	if (p.get()==NULL)
	{
		strm<<"NULL";
	}
	else
	{
		strm<<*p;
	}
	return strm;
}

int main()
{
	auto_ptr<int> p(new int(42));
	auto_ptr<int> q(new int(0));
	auto_ptr<int> r;
	cout<<"after initialization:"<<endl;
	cout<<"p:"<<p<<endl;
	cout<<"q:"<<q<<endl;
	cout<<"r:"<<r<<endl;

	*q=*p;
	*p=-77;
	cout<<"after assigning auto pointers:"<<endl;
	cout<<"p:"<<p<<endl;
	cout<<"q:"<<q<<endl;
	cout<<"r:"<<r<<endl;

	system("pause");
}

  

posted on 2012-08-22 22:54  咆哮的蛋蛋  阅读(135)  评论(0编辑  收藏  举报