剑指offer-001(赋值运算符重载函数)
#include<cstring>
#include<cstdio>
class CMyString
{
public:
CMyString(char* pData = nullptr);
CMyString(const CMyString& str);
~CMyString(void);
CMyString& operator = (const CMyString& str);
void Print();
private:
char* m_pData;
}
CMyString::CMyString(char* pData)
{
if(pData == nullptr)
{
m_pData = new char[1];
*m_pData = '\0';
}
else
{
m_pData = new char[strlen(pData) + 1];
strcpy(m_pData,pData);
}
}
//拷贝构造
CMyString::CMyString(const CMyString& str)
{
char* tmp = new char[strlen(str.m_pData) + 1];
strcpy(tmp,str.m_pData);
delete[] m_pData;
m_pData = tmp;
}
CMyString::~CMyString()
{
delete[] m_pData;
}
CMyString& CMyString::operator=(const CMyString& str)
{
if(this != &str)
{
char* tmp = new char[strlen(str.m_pData) + 1];
strcpy(tmp,str.m_pData);
delete[] m_pData;
m_pData = nullptr;
m_pData = tmp;
}
return *this;
}
void CMyString::Print()
{
cout << m_pData << endl;
}