如何编写operator =

大耗子 2020年07月17日 101次浏览

类前提概要

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;

}