类前提概要
class CMyString
{
public:
CMyString(char* pData = nullptr);
CMyString(const CMyString& str);
~CMyString(void);
CMyString& operator = (const CMyString &str);
private:
char* m_pData;
};
赋值的最常规写法:
CMyString& CMyString::operator = (const CMyString &str)
{
if(this == &str)
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;
}
赋值的老鸟写法:
CMyString& CMyString::operator = (const CMyString &str)
{
if(this != &str)
{
// 这确保了内存的申请
CMyString strTemp(str);
// 交换他们的内存,由于strTemp是临时变量,
// 出了生命周期,内存就帮我们释放了,免去了我们释放的步骤
char* pTemp = strTemp.m_pData;
strTemp.m_pData = m_pData;
m_pData = pTemp;
}
return *this;
}