#include<cstring>
#include<cstdio>
class CMyString
{
public:
CMyString(char* pData = nullptr); //构造函数
CMyString(const CMyString& str); //拷贝构造函数
~CMyString(void); //析构函数
CMyString& operator = (const CMyString& str); //拷贝赋值运算符
private:
char* m_pData;
};
CMyString::CMyString(char *pData)
{
if (pData == nullptr)
{
m_pData = new char[1];
m_pData[0] = '\0';
}
else
{
int length = strlen(pData);
m_pData = new char[length + 1];
strcpy(m_pData, pData);
}
}
CMyString::CMyString(const CMyString &str)
{
int length = strlen(str.m_pData);
m_pData = new char[length + 1];
strcpy(m_pData, str.m_pData);
}
CMyString::~CMyString()
{
delete[] m_pData;
}
CMyString& CMyString::operator=(const CMyString& str) { //参数为常量引用,传值的话会导致调用拷贝构造函数,复制一次值降低性能
if (&str == this) { //确保不是自己给自己赋值,不然后面会把自己和传过来的实例的内存释放掉
return *this;
}
delete[] m_pData; //释放已有内存,避免内存泄漏
m_pData = nullptr;
m_pData = new char[strlen(str.m_pData) + 1];
strcpy(m_pData, str.m_pData);
return *this; //返回一个引用而不是void是为了连续赋值 s1=s2=s3
}