[ ] После перемещения строка-донор должна оставаться в валидном состоянии. В частности, метод GetStringData() должен возвращать указатель на zero-terminated массив символов (у вас возвращается nullptr). Операции, в которых фигурирует строка-донор также должны корректно выполняться (в частности, не должен передаваться nullptr в функции вроде memcmp или memcpy)
[ ] Если оператор new выбросит исключение, указатель m_pString будет указывать на уже удаленную область памяти, а последующий вызов деструктора приведет к повторному вызову delete уже удаленного массива символов