I am trying to implement a smart pointer (basically unique pointer) in C++ using templates for my understanding.
This is what I have coded
using namespace std;
template<typename T>
class smartPointer
{
    private:
        T *mPtr;
    public:
        smartPointer(T* init=nullptr):mPtr(init)
        {
            cout<<"Inside ctr"<<endl;
        }
        //silence the default ctr
        smartPointer() = delete;
        //disable copy ctr and copy assignment
        smartPointer  (const smartPointer& other) = delete;
        smartPointer& operator=(const smartPointer& other) = delete;
        //implement move ctr and move assignment
        smartPointer  (smartPointer&& other)
        {
            cout<<"Inside move ctr "<<endl;
            mPtr = other.mPtr;
            other.mPtr = nullptr;
        }
        smartPointer& operator=(smartPointer&& other)
        {
            cout<<"Inside move = before "<<endl;
            if(&other != this)
            {
                mPtr = other.mPtr;
                other.mPtr = nullptr;
                cout<<"Inside move = after "<<endl;
            }
        return *this;
        }
        //deference
        T& operator*()
        {
            return *mPtr;
        }
        //arrow  access operator
        T* operator->()
        {   
            return mPtr;
        }
        ~smartPointer()
        {   
            cout<<"Inside ~dtr"<<endl;
            if(mPtr != nullptr)
            delete mPtr;
        }
};
int main()
{
     smartPointer<int> sptr(new int);
     // Even smartPointer<int> sptr(new int[20]); too works
     *sptr = 10;
     cout<<"Value pointed by the pointer  is "<<*sptr<<endl;     
    smartPointer<int> sptr2(new int);
//  sptr2 = sptr; // complains as expected
    sptr2 = move(sptr); // works well
    /*
    How to 
    smartPointer<int[]>  sptr(new int[20]); 
    */
    return 0;
}
How to make this smart pointer to work for smartPointer ?
The build command I give is g++ -std=c++11 -smartPointer.cpp -o smartPointer
 
    