AutoPtr定义
//AutoPtr
template<typename T>
class AutoPtr{
public:AutoPtr(){m_ptr = NULL; cout<<"create: m_ptr()."<<endl;}AutoPtr(AutoPtr<T>& p){m_ptr = p.m_ptr;p.m_ptr = NULL; cout<<"create: m_ptr(&p)."<<endl;}AutoPtr(T* p):m_ptr(p){cout<<"create: m_ptr(*p)."<<endl;}AutoPtr& operator=(AutoPtr<T>& p){if(this != &p){cout<<"operator =: this != p "<<endl;delete m_ptr;m_ptr = p.m_ptr;p.m_ptr = NULL;}else{cout<<"operator =: this == p "<<endl;}return *this;}~AutoPtr(){if (NULL != m_ptr ){cout<<"delete: m_ptr is not null."<<endl;delete m_ptr;}else{cout<<"delete: m_ptr is null."<<endl;}}T& operator*(){return *m_ptr;}T* operator->(){return m_ptr;}protected:T* m_ptr;
};
测试代码
//Test
int main()
{cout<<"Test start."<<endl;AutoPtr<int> p1(new int(100));cout<<"p1 = "<<*p1<<endl;*p1 = 110;cout<<"p1 = "<<*p1<<endl;AutoPtr<int> p2(new int(200));cout<<"p2 = "<<*p2<<endl;AutoPtr<int> p3;p3 = p1;AutoPtr<int> p4 = p2;cout<<"p3 = "<<*p3<<", p4 = "<<*p4<<endl;return 0;
}