Mega Code Archive

 
Categories / C++ Tutorial / Pointer
 

Define output operator for auto_ptr print object value or NULL

/* The following code example is taken from the book  * "The C++ Standard Library - A Tutorial and Reference"  * by Nicolai M. Josuttis, Addison-Wesley, 1999  *  * (C) Copyright Nicolai M. Josuttis 1999.  * Permission to copy, use, modify, sell and distribute this software  * is granted provided this copyright notice appears in all copies.  * This software is provided "as is" without express or implied  * warranty, and with no claim as to its suitability for any purpose.  */ #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 reassignment:" << 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 reassignment: p: 55 q: NULL