#include <iostream>
#include <memory>
using namespace std;
template<typename T>
class CSmartPtr
{
public:
CSmartPtr(T *ptr = nullptr):mptr(ptr)
{
}
~CSmartPtr()
{
delete mptr;
mptr=nullptr;
}
T& operator * () {return *mptr;}
T* operator -> () {return mptr;}
private:
T *mptr;
};
int main()
{
CSmartPtr<int> ptr1(new int);
CSmartPtr<int> ptr2(ptr1);
*ptr2=10;
CSmartPtr<int> p3=ptr1;
cout<<*p3;
return 0;
}