
template <typename T>
class SmartPoint{
private:
	

public:
	T * mPtr;
	long *mVar;
	SmartPoint(){}
	SmartPoint(T* _Ptr):mPtr(_Ptr),mVar(new long){
		printf("SmartPoint(mPtr)\n");
		*mVar=0;
	}
	~SmartPoint(){
		if ( *mVar == 0 ){
			delete mPtr;
			delete mVar;
		}
	}
	
	SmartPoint& operator = (SmartPoint& other)
	{
		printf("SmartPoint=1xx\n");
		if ( this != &other )
		{
			delete mPtr;
			delete mVar;
			printf("SmartPoint=2xx\n");
			mPtr=other.mPtr;
			mVar=other.mVar;
			*mVar+=1;
		}
		return *this;
	}
	T * get()
	{
		return mPtr;
	}

};
