#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;
}