编辑代码

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

//定义一个操作符<<重载函数来输出 auto_ptr所指的对象还是空
template<typename T>
ostream& operator <<(ostream& out,const auto_ptr<T>& p)
{
    if(p.get()==NULL)
        out<<"NULL";
    else
        out<<*p;
    return out;
}
int main() {
    auto_ptr<int> p{new int{369}};
    auto_ptr<int> q;

    cout<<"after initialzation:"<<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;
    cout<<"after *q +=13 : "<<endl;
    cout<<" P: "<<p<<endl;
    cout<<" q: "<<q<<endl;

    cout<<"after reassignment : "<<endl;
    cout<<" P: "<<p<<endl;
    cout<<" q: "<<q<<endl;
    
	return 0;
}