#include <iostream>
#include <memory>
using namespace std;class A
{
public:A(){cout<<"构造"<<endl;}~A(){cout<<"A析构"<<endl;}void fun(){cout<<"A::fun"<<endl;}
};class PA
{
public:PA(A* pa):m_pa(pa){}~PA(){if(m_pa) delete m_pa;}PA (PA& that):m_pa(that.release()){} //auto_ptr 愚蠢的关键PA& operator=(PA& that){if(&that != this)reset(that.release());return *this; }A* operator->() //重载->{return m_pa;}A& operator*() //重载*{return *m_pa;}private:A* release(){A* pa = m_pa;delete m_pa;return pa;}void reset(A* pa){if(pa != m_pa)delete m_pa; //释放掉原来的资源 再接收新的资源m_pa = pa;}A * m_pa;
};void bar(auto_ptr<A> ap)
{}int main()
{PA pa(new A);pa->fun();//pa->operator->()->fun()(*pa).fun();//pa.operator*().fun()auto_ptr<A> pb;pb->fun();(*pb).fun();bar(pb);//pb->fun(); 智能指针不能跨函数使用 不能用于数组return 0;
}