#include <iostream>
#include <memory>
using namespace std;
/* define output operator for auto_ptr
* print object value or NULL
*/
template<class T>
ostream& operator<< (ostream& strm, const auto_ptr<T>& p)
{
// does p own an object ?
if (p.get() == NULL)
{
strm << "NULL"; // NO:print NULL
}
else
{
strm << *p; // YES:print the object
}
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; // change value of the object q owns
p = q;
cout << "after change and reassingnment:" << endl;
cout << " p: " << p << endl;
cout << " q: " << q << endl;
}
输出结果:
after initialization:
p: 42
q: NULL
after assigning auto pointers:
p: NULL
q: 42
after change and reassingnment:
p: 55
q: NULL
请按任意键继续. . .