Trying to write string class that can do move semantics from an std::string
===

I am writing my own string class for really just for learning and cementing some knowledge.  I have everything working except I want to have a constructor that uses move semantics with an std::string.  

Within my constructor I need to null out the std::string data pointers and other things, it needs to be left in an empty but valid state, without deleting the data the string points to, how do I do this?

So far I have this
    class String
    {
    private:
    char* mpData;
    unsigned int mLength;
    public:
    String( std::string&& str)
        :mpData(nullptr), mLength(0)
        {
        const char* pData = str.c_str();
        mLength = str.length();
        mpData = new char[mLength + 1];
        strcpy(mpData, pData);
        //str.clear();
        }
    ~String()
    {
    delete[] mpData;
    mLength = 0;
    }